当连续行的差小于某个值时,将熊猫数据框中的行分组

时间:2020-06-17 19:13:55

标签: python pandas dataframe

我有一个这样的数据框,

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的行进行分组,并对其他列值求和,用该组的最后一个值创建另一个column(col4), 所以最终的数据帧看起来像是

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

使用for循环执行此操作很繁琐,需要寻找一些熊猫快捷方式来最有效地执行此操作。

1 个答案:

答案 0 :(得分:1)

您可以在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()