Pandas 数据帧:分组后 Diff 方法极慢 (groupby)

Pandas dataframes: Diff method extremely slow after grouping (groupby)

提问人:Matt 提问时间:11/15/2023 最后编辑:Matt 更新时间:11/15/2023 访问量:33

问:

我正在处理一个大小适中的 pd 数据帧,它由大约 50k 行和 5 列组成:

  • A、B、C,可被视为产品的唯一标识符(例如,销售的商店、产品的性质和品牌)。
  • X,这是一个可以排序的变量(例如,我们记录信息的日期)
  • Y 是我们感兴趣/监控的值(例如,该日期所述产品的销售数量)。

我想要实现的是将 Y 的差异视为 X 的函数,对于 A、B、C 的每个唯一组合。这应该非常简单,使用对 X 进行排序,然后在 A、B、C 上进行分组,然后在 Y 上进行差异排序。

我发现 groupby 本身非常快,原始数据上的差异很快,但 diff 与 groupby 耦合的速度非常慢 (1,000x)。

  1. 分组操作:0.005 秒
  2. 差速运算:0.005 秒
  3. groupby+diff:10 秒,即两个单独操作之和的 1,000 倍)

请注意,我的 pandas 版本是 0.24.2

import numpy, pandas
from timeit import default_timer as timer

# Initialize dummy df
df = pandas.DataFrame( numpy.random.randint( 0, 100, size=( 50000, 5 ) ), columns=list( 'ABCXY') )

# Groupby
start = timer()
_ = df.sort_values( [ 'X' ], axis=0 ).groupby( list( 'ABC' ) )[ 'Y' ]
print( timer() - start )
    
# Diff
start = timer()
_ = df.sort_values( [ 'X' ], axis=0 )[ 'Y' ].diff()
print( timer() - start )
    
# Groupby + Diff
start = timer()
df.index = df.index.astype(int)
_ = df.sort_values( [ 'X' ], axis=0 ).groupby( list( 'ABC' ) )[ 'Y' ].diff()
print( timer() - start )
熊猫 数据帧 性能 分组 差异

评论

1赞 Nick 11/15/2023
我无法在我的系统上重现;我得到的东西比总和少:0.0796, 0.0687, 0.1075

答: 暂无答案