如何用Pandas合并索引相差±1的相邻行并对指定列求和
实现相邻加油记录合并的方案
实现逻辑
通过给原始索引连续的记录分配相同分组标识,再按分组聚合的方式完成合并,步骤如下:
- 生成连续索引分组标签:当前记录原始索引与上一条记录原始索引差值不为1时,开启新分组
- 按分组聚合:每组保留最后一行的索引、事件、时间、油位、里程字段值,对差值字段求和
代码修改
你只需要在现有代码的df1filt.reset_index(level=0, inplace=True)之后,调用askopenfilename获取保存路径之前,加入以下代码即可:
# 生成连续相邻索引的分组标识 df1filt['group_id'] = (df1filt['index'].diff() != 1).cumsum() # 按分组聚合实现合并 df_merged = df1filt.groupby('group_id').agg( # 保留每组最后一行的字段 index = ('index', 'last'), Händelse = ('Händelse', 'last'), Tid = ('Tid', 'last'), `Bränslenivå (%)` = ('Bränslenivå (%)', 'last'), `Körda km (km)` = ('Körda km (km)', 'last'), # 差值字段求和 `Difference (%)` = ('Difference (%)', 'sum') ).reset_index(drop=True)
提示:如果你的里程列实际名称与上述代码中的
Körda km (km)不一致,替换为你DataFrame中对应的里程列名即可。
后续你可以直接将合并后的df_merged保存到Excel:
filepathname3 = askopenfilename() df_merged.to_excel(filepathname3, index=False)
内容的提问来源于stack exchange,提问作者Leopold Wahlbeck
相关产品推荐
相关产品推荐

