首页 > 解决方案 > 当连续行的差异小于一个值时,对熊猫数据框中的行进行分组

问题描述

我有一个这样的数据框,

col1    col2    col3
 1        2       3
 2        3       4
 4        2       3
 7        2       8
 8        3       4
 9        3       3
 15       1       12

现在我想对两个连续 col1 行之间差异小于 3 的行进行分组。并对其他列值求和,用组的最后一个值创建另一列(col4),所以最终的数据框看起来像,

col1    col2    col3    col4
  1       7       10     4
  7       8       15     9

使用 for 循环来做到这一点很乏味,寻找一些 pandas 的快捷方式来最有效地做到这一点。

标签: pythonpandasdataframe

解决方案


您可以对 groupby 进行命名聚合:

(df.groupby(df.col1.diff().ge(3).cumsum(), as_index=False)
   .agg(col1=('col1','first'),
        col2=('col2','sum'),
        col3=('col3','sum'),
        col4=('col1','last'))
)

输出:

   col1  col2  col3  col4
0     1     7    10     4
1     7     8    15     9
2    15     1    12    15

在没有命名聚合的情况下进行更新,您可以执行以下操作:

groups = df.groupby(df.col1.diff().ge(3).cumsum())
new_df = groups.agg({'col1':'first', 'col2':'sum','col3':'sum'})
new_df['col4'] = groups['col1'].last()

推荐阅读