提问人:Matt 提问时间:11/15/2023 最后编辑:Matt 更新时间:11/15/2023 访问量:33
Pandas 数据帧:分组后 Diff 方法极慢 (groupby)
Pandas dataframes: Diff method extremely slow after grouping (groupby)
问:
我正在处理一个大小适中的 pd 数据帧,它由大约 50k 行和 5 列组成:
- A、B、C,可被视为产品的唯一标识符(例如,销售的商店、产品的性质和品牌)。
- X,这是一个可以排序的变量(例如,我们记录信息的日期)
- Y 是我们感兴趣/监控的值(例如,该日期所述产品的销售数量)。
我想要实现的是将 Y 的差异视为 X 的函数,对于 A、B、C 的每个唯一组合。这应该非常简单,使用对 X 进行排序,然后在 A、B、C 上进行分组,然后在 Y 上进行差异排序。
我发现 groupby 本身非常快,原始数据上的差异很快,但 diff 与 groupby 耦合的速度非常慢 (1,000x)。
- 分组操作:0.005 秒
- 差速运算:0.005 秒
- 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 )
答: 暂无答案
评论
0.0796, 0.0687, 0.1075