Python长表转宽表:将同一标识符关联城镇合并至单行
Python长转宽:合并同一标识符的关联城镇
解决方案:使用pandas的分组聚合
你遇到的问题核心是对同一标识符下的多值进行字符串聚合,而非传统的数值型宽表转换(比如pivot),用groupby配合字符串拼接就能解决:
- 先导入
pandas库:
import pandas as pd
- 构造示例原始数据(模拟你的输入格式):
# 原始长格式数据 df = pd.DataFrame({ '标识符': ['A', 'A', 'B', 'C', 'C', 'C', 'D', 'E'], '城镇': ['北京', '上海', '广州', '深圳', '杭州', '南京', '成都', '西安'] })
- 执行分组聚合,将同一标识符的城镇用逗号分隔:
# 按标识符分组,拼接城镇列 result_df = df.groupby('标识符')['城镇'].agg(','.join).reset_index()
- 输出结果:
print(result_df)
输出效果:
标识符 城镇 0 A 北京,上海 1 B 广州 2 C 深圳,杭州,南京 3 D 成都 4 E 西安
进阶:处理重复城镇
如果原始数据中同一标识符下存在重复的城镇,可以先去重再拼接:
result_df = df.groupby('标识符')['城镇'].agg(lambda x: ','.join(x.unique())).reset_index()
为什么不用pivot?
传统的pivot/pivot_table适合将多列值转为宽表的不同列,但你的需求是将同一列的多值合并为单个字符串,因此分组聚合是更直接的方案。
内容的提问来源于stack exchange,提问作者omirz
相关产品推荐
相关产品推荐

