python - 当连续行的差异小于一个值时,对熊猫数据框中的行进行分组
问题描述
我有一个这样的数据框,
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 的快捷方式来最有效地做到这一点。
解决方案
您可以对 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()
推荐阅读
- r - R:新变量,其值来自另一个变量,基于第三个变量中的最小值,按 ID 分组
- ruby - cron 作业在 shell 脚本中的 ruby 问题
- php - 将 Contact form 7 变量传递到屏幕
- java - 有没有办法旋转由像素值的二维数组表示的图像?
- c - 如何使用特定于级别的宏获取自定义日志记录功能以处理格式化打印
- javascript - 如何在javascript中添加图像我一直试图通过这个api获取它
- reactjs - CORS 缺少允许带有 login_required Django 的来源
- stata - 在不破坏数据的情况下在 Stata 中重新编码分类变量的级别
- c# - 根据添加到 ApplicationUser 的 Locked 属性授权对控制器的访问
- dns - Okhttp dns 缓存失效