Python Pandas groupby.diff()未返回预期输出

Python Pandas groupby.diff()未返回预期输出,python,pandas,group-by,difference,Python,Pandas,Group By,Difference,我有一个外部组和一个内部组,我希望根据外部组找出每个内部组的差异。通常,我可以使用groupby将内部组嵌套在每个外部组中,但是出于某种原因,groupby的diff函数返回一个平面向量而不是嵌套数组 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

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

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
例如,如果我需要每个外部组的内部组的总和,我只需使用groupby:

以上是正确的输出,它适用于除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似乎没有考虑外部组。我可以找到解决这个问题的方法,但是使用groupby会更加优雅和简洁。有人知道为什么会发生这种情况以及如何补救吗?

像s.diff、cumsum等函数都是非聚集函数,因此你可以得到一系列的结果,你可以在这里使用,如下示例:

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

Diff将通过每组中的每个值,这意味着如果你有3个值,你将有2个diff@W-B目前,groupby甚至没有考虑外部组。您看到的输出与我执行df.groupby['inner'].value.diff时的输出完全相同,因此我不确定您的评论如何解决这个问题。事实上,不管有多少个外部组,输出总是一样的。第二个组级别甚至不需要,因为每个组级别1只有一个唯一的级别2,因此df.groupby['inner']=df.groupby['outer','inner'],只有索引是不同的。这可以按需要工作,谢谢!我不知道这些函数之间有功能上的差异。@GeneBurinsky感谢您的接受。很高兴我能帮助你
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