【发布时间】:2019-10-22 04:29:35
【问题描述】:
我有日期时间索引和形状的数据框:
df.shape
(311885, 38)
聚合函数 .sum()、.mean() 和 .median() 工作正常:
%%time
df.groupby(pd.Grouper(freq='D')).mean()
CPU times: user 77.6 ms, sys: 16 ms, total: 93.7 ms
Wall time: 92.7 ms
但是,.min() 和 .max() 非常慢:
%%time
df.groupby(pd.Grouper(freq='D')).min()
CPU times: user 51.1 s, sys: 377 ms, total: 51.5 s
Wall time: 51.1 s
另外,尝试重新采样,结果同样糟糕:
%%time
df.resample('D').min()
CPU times: user 52.2 s, sys: 478 ms, total: 52.7 s
Wall time: 52.2 s
已安装的版本:
pd.__version__
'0.25.2'
print(sys.version)
3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]]
这是预期的行为吗? .min() 和 .max() 的时序可以改进吗?
【问题讨论】:
-
可以,只要使用drop_duplicate或者duplicate
-
您的数据是否包含文本/字符串?
mean, sum会忽略它们,但 min, max 不会。 -
@QuangHoang 我认为
groupby不会忽略 sum 的字符串:pd.DataFrame([['A', 'B']*2]*10).groupby(0).sum() -
哦,好吧,你明白了!一列是字符串,当我删除它时,最小值和最大值变得很快!谢谢:)
-
@ALollz 好点。虽然字符串 sum 在某种程度上比
int/floatsum 更快,所以这可能不算数:-)。