Pandas不使用groupby实现连续同值分块汇总表方法
Pandas按连续同值块聚合统计实现方案
直接使用groupby('x')会合并所有同x值的记录,无法区分非连续的同值块,解决思路是先为每个连续同值块生成唯一ID,再按该ID分组聚合即可保留块的先后顺序。
实现步骤
- 生成连续块标识:对比当前行x值与上一行x值,值发生变化的位置记为新块起点,通过布尔值累加生成唯一块ID
- 按块ID分组聚合,分别统计块内x取值、记录数、首个y值、末尾y值
完整可运行代码
import pandas as pd # 构造示例DataFrame data = {'x': [1, 2, 2, 2, 1, 1], 'y': [1, 3, 5, 4, 4, 5]} df = pd.DataFrame(data) # 为连续同值块生成唯一ID df['block_id'] = (df['x'] != df['x'].shift()).cumsum() # 按块聚合得到目标汇总表 result = df.groupby('block_id').agg( x=('x', 'first'), **{'# occurance': ('y', 'count')}, **{'first y value': ('y', 'first')}, **{'last y value': ('y', 'last')} ).reset_index(drop=True)
运行结果
执行代码后得到的result完全匹配预期输出:
| x | # occurance | first y value | last y value |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 2 | 3 | 3 | 4 |
| 1 | 2 | 4 | 5 |
该逻辑可通用在所有需要按连续值分块统计的场景,只需将生成块ID逻辑中的
df['x']替换为目标分块字段即可。
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

