如何将Pandas表格中相同ID的多行不同值合并为一行多列?
问题:将重复ID的多行数据转为单行多列格式
我有一个Pandas表格,其中部分ID在多行中重复出现,但对应的取值各不相同。希望实现每个ID仅在一行中显示,并将不同的取值追加到多列中。
起始表格
| ID | 列1 |
|---|---|
| 1 | blue |
| 1 | red |
| 2 | gray |
| 3 | yellow |
| 4 | orange |
| 1 | pink |
| 2 | white |
期望结果
| ID | 列1 | 列2 | 列3 |
|---|---|---|---|
| 1 | blue | red | pink |
| 2 | gray | white | |
| 3 | yellow | ||
| 4 | orange |
解决方案
可以通过分组计数+透视表的方式实现,具体代码如下:
import pandas as pd # 1. 构造示例数据(替换为你的DataFrame即可) data = { 'ID': [1,1,2,3,4,1,2], '列1': ['blue','red','gray','yellow','orange','pink','white'] } df = pd.DataFrame(data) # 2. 为每个ID分组内的行添加序号(从1开始) df['序号'] = df.groupby('ID').cumcount() + 1 # 3. 透视转换:将序号转为列,ID作为行索引 result = df.pivot(index='ID', columns='序号', values='列1') # 4. 重命名列名,匹配"列1、列2..."的格式 result.columns = [f'列{col}' for col in result.columns] # 5. 重置索引,让ID变回普通列;空值填充为空字符串 result = result.reset_index().fillna('') print(result)
代码说明
groupby('ID').cumcount():给每个ID分组内的行按顺序计数,+1是让序号从1开始,对应后续的列1、列2。pivot():将分组后的序号转为列,实现行转列的效果。fillna(''):把透视后产生的空值(NaN)替换为空字符串,和期望结果格式一致。
内容的提问来源于stack exchange,提问作者eliaelia77
相关产品推荐
相关产品推荐

