[英]Groupby conditional sum of adjacent rows pandas
我有一個數據框,已按用戶和時間排序
df = pd.DataFrame({'user' : ['A', 'A', 'A', 'B', 'B', 'B','B'],
'location' : ['house','house','gym','gym','shop','gym','gym'],
'duration':[10,5,5,4,10,4,6]})
duration location user
0 10 house A
1 5 house A
2 5 gym A
3 4 gym B
4 10 shop B
5 4 gym B
6 6 gym B
我只想在給定用戶的相鄰行中的“位置”字段相同時執行sum()
。 所以它不僅僅是df.groupby(['id','location']).duration.sum()
。 所需的輸出將如下所示。 此外,順序很重要。
duration location user
15 house A
5 gym A
4 gym B
10 shop B
10 gym B
謝謝!
提供sort=False
以保留組之間的順序,就像它出現在原始DF
中一樣。 然后,計算持續時間列的分組總和。
adj_check = (df.location != df.location.shift()).cumsum()
df.groupby(['user', 'location', adj_check], as_index=False, sort=False)['duration'].sum()
需要對您之前嘗試過的內容進行的唯一更改是這種條件,它將所有相似的連續行分組到一個唯一的組中:
(df.location != df.location.shift()).cumsum()
0 1
1 1
2 2
3 2
4 3
5 4
6 4
Name: location, dtype: int32
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.