我有一个这样的数据框,
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循环执行此操作很繁琐,需要寻找一些熊猫快捷方式来最有效地执行此操作。
答案 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()