熊猫:与先前价值的差异

时间:2016-10-21 21:31:06

标签: python pandas

鉴于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万组的大型数据帧快速计算?

2 个答案:

答案 0 :(得分:2)

实际上瓶颈是groupby。您实际上并不需要使用groupby来解决此特定问题。要按sort GROUP数据框,请对已排序的数据框执行difffilter的{​​{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)

使用groupbydiff'MASK'

pd.concat([df.VALUE, df.groupby('GROUP').VALUE.diff()],
          axis=1, keys=['VALUE', 'DIFF'])[df.MASK]

enter image description here