熊猫groupby.diff()未返回预期输出

时间:2019-01-19 01:52:21

标签: python pandas group-by difference

我有一个外部组和一个内部组,我希望根据外部组找到每个内部组之间的差异。通常,我可以使用groupby将内部组嵌套在每个外部组中,但是由于某种原因,diff的{​​{1}}函数返回的是平面向量,而不是嵌套数组。

groupby

例如,如果我希望每个外部组的内部组都使用df = pd.DataFrame({'inner':list('aabbccddee'),'outer':[0,0,1,1,0,0,1,1,0,0], 'value':np.random.randint(0,100,10)}) inner outer value 0 a 0 78 1 a 0 68 2 b 1 78 3 b 1 22 4 c 0 53 5 c 0 25 6 d 1 82 7 d 1 38 8 e 0 2 9 e 0 39 ,则只需使用sum

groupby

以上是正确的输出,它对除 In [19]: df.groupby(['outer','inner']).sum() Out[19]: value outer inner 0 a 146 c 78 e 41 1 b 100 d 120 以外的所有其他功能有效。当我使用diff时,我希望以与上述类似的格式输出,但我得到:

diff

以上等同于In [20]: df.groupby(['outer','inner']).diff() Out[20]: value 0 NaN 1 -10.0 2 NaN 3 -56.0 4 NaN 5 -28.0 6 NaN 7 -44.0 8 NaN 9 37.0 ,因此似乎df.groupby(['inner']).value.diff()没有考虑外部群体。我可以找到没有问题的锻炼方法,但是使用groupby会更优雅和简洁。有谁知道这是为什么发生以及如何补救?

1 个答案:

答案 0 :(得分:1)

诸如s.diff()cumsum等的函数是非聚合函数,因此您将获得一系列形状的结果,可以在此处使用np.diff(),例如以下示例:

print(df.groupby(['outer','inner'])['value'].apply(lambda x: np.diff(x).item()))

outer  inner
0      a       -10
       c       -28
       e        37
1      b       -56
       d       -44