鉴于Pandas数据框看起来像这样
GROUP VALUE MASK
1 5 false
2 10 false
2 20 false
1 7 true
3 17 false
3 18 false
1 100 false
1 200 true
对于MASK为真的每一行,我想得到该组中先前值的差异,即结果应为
VALUE DIFF
7 2
200 100
我怎样才能在Pandas中计算出来?
如何对大约200万行和100万组的大型数据帧快速计算?
答案 0 :(得分:2)
实际上瓶颈是groupby
。您实际上并不需要使用groupby
来解决此特定问题。要按sort
GROUP
数据框,请对已排序的数据框执行diff
,filter
的{{1}}应该没问题。在排序之前和之后,我们必须使用MASK
来保持组内的订单不变,
假设MASK对于每个组的第一个元素总是为假(因为第一个元素对差异操作没有意义),你可以使用这个
kind='mergesort'
性能测试:
pd.concat([df.VALUE, df.sort_values(by="GROUP", kind='mergesort').VALUE.diff()], axis=1, keys=['VALUE', 'DIFF'])[df.MASK]
答案 1 :(得分:1)