簡體   English   中英

相鄰行熊貓的分組條件總和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM