【问题标题】:Pandas grouping extremely slow for aggregations min and maxPandas 对聚合 min 和 max 的分组速度极慢
【发布时间】: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/float sum 更快,所以这可能不算数:-)。

标签: python pandas


【解决方案1】:

正如 Quang Hoang 在评论中指出的那样,我的字符串列导致 .min() 和 .max() 变慢。没有它,一切都很快。

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2019-08-25
    • 2016-11-05
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    相关资源
    最近更新 更多