基于ResNum列合并多行并拼接Rate列值的Pandas需求
Pandas实现按ResNum合并行并拼接Rate列值
核心实现思路
- 以
ResNum列为分组依据,将同一组内的Rate列值用竖线|拼接成单个字符串 - 对包含Name、Nights在内的46列,因同一
ResNum对应行的这类字段值通常一致,直接保留每组内的第一个值即可
代码实现步骤
- 导入Pandas库
import pandas as pd
- 加载电子表格数据(根据实际文件格式调整读取方式)
# Excel格式 df = pd.read_excel('your_data.xlsx') # CSV格式则替换为:df = pd.read_csv('your_data.csv')
- 定义聚合规则并执行分组合并
# 构造聚合规则:Rate列做竖线拼接,其余列取每组第一个值 aggregation_rules = { 'Rate': lambda x: '|'.join(x.astype(str)), # 转为字符串避免数值类型拼接报错 **{col: 'first' for col in df.columns if col not in ['ResNum', 'Rate']} } # 按ResNum分组聚合,保留原始列结构 merged_df = df.groupby('ResNum', as_index=False).agg(aggregation_rules)
关键注意事项
- 如果部分非
ResNum、Rate的列在同一ResNum分组内存在不同值,需调整对应列的聚合规则:比如同样用'|'.join拼接,或取众数'mode',具体根据业务需求处理 - 2万行的数据量属于Pandas常规处理范围,上述方法效率足够,无需额外优化
- 可提前验证分组内字段的唯一性,排查异常数据:
# 查看各列在分组内的最大不同值数量 unique_counts = df.groupby('ResNum').nunique().max() print(unique_counts[unique_counts > 1]) # 输出存在多值的列
内容的提问来源于stack exchange,提问作者Boomer
相关产品推荐
相关产品推荐

