[英]Pandas groupby.diff() not returning expected output
我有一個外部組和一個內部組,我希望根據外部組找到每個內部組之間的差異。 通常,我可以使用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
例如,如果我想要每個外部組的內部組的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
似乎沒有考慮外部組。 我可以找到沒有問題的鍛煉方法,但是使用groupby
會更優雅和簡潔。 有誰知道這是為什么發生以及如何補救?
諸如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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.