pandas入门:指定列值匹配时合并相邻两行的实现及多条件处理咨询
实现方案
你完全不需要自己手写逐行遍历逻辑,用pandas内置的分组聚合方法就能高效搞定,即使大数据量也不会卡:
import pandas as pd # 读取本地csv文件 df = pd.read_csv("你的文件路径.csv") # 生成连续同值分组标签 # 如果需要同时校验多列合并条件,把下方[['Rm']]替换成你要校验的所有列即可,比如[['Rm', 'Rx', 'Ry']] df['group_id'] = (df[['Rm']] != df[['Rm']].shift()).any(axis=1).cumsum() # 按分组聚合,聚合规则可根据你的实际需求调整 res = df.groupby('group_id', as_index=False).agg( Name = ('Name', ','.join), # 名称列用逗号拼接 R0 = ('R0', 'last'), # 你示例中合并后R0取第二行的5,所以用last,要求和就改成'sum' Rm = ('Rm', 'first'), # 同一组Rm值相同,取第一行即可 R1 = ('R1', 'first') # 你示例中合并后R1取第一行的3,所以用first ).drop(columns='group_id')
上面的代码直接就能跑出你给出的示例结果。
合并条件校验方式选择
建议直接一次遍历校验所有列的合并条件,不要分开多次遍历:
- 上述的分组逻辑本身只需要O(n)的时间复杂度就能完成,不管你有多少个要校验的列,都只需要跑一次,性能开销很低。
- 如果分开多次遍历、每次单独处理一个列的合并规则,不仅会多几倍的计算开销,还要反复处理合并后的行对齐、分组失效的问题,非常容易出逻辑bug,数据量越大性能差距越明显。
内容的提问来源于stack exchange,提问作者pierrebauman
相关产品推荐
相关产品推荐

