Python 实现DataFrame相同首列值连续行其余列数值相加合并
实现方法
你可以通过pandas的分组聚合逻辑完成需求,核心思路是先为连续值相同的position行生成统一分组标签,再按组对数值列求和即可,代码如下:
import pandas as pd # 构造示例DataFrame,实际使用时替换为你自己的数据即可 df = pd.DataFrame({ 'position': [1, 1, 2, 2], 'length': [5.5, 0.0, 4.1, 0.0], 'height': [0.0, 2.1, 0.0, 3.5] }) # 生成连续相同position的分组标签 continuous_group = (df['position'] != df['position'].shift()).cumsum() # 按分组聚合,得到最终结果 result = df.groupby(continuous_group).agg( position=('position', 'first'), length=('length', 'sum'), height=('height', 'sum') ).reset_index(drop=True) print(result)
运行后输出的result就是你期望的合并结果:
| position | length | height |
|---|---|---|
| 1 | 5.5 | 2.1 |
| 2 | 4.1 | 3.5 |
逻辑说明
df['position'] != df['position'].shift()会比对当前行与上一行的position值是否不同,返回布尔序列,用cumsum()累加后,所有连续相同position的行都会被分配到同一个分组,完全匹配你「仅连续相同值才合并」的要求,如果出现非连续的相同position(比如行顺序为1,1,2,1),不会被误合并。
内容的提问来源于stack exchange,提问作者Christina
相关产品推荐
相关产品推荐

