繁体   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