基于id在Pandas中从列值生成新列
解决方法
你可以通过分组编号+透视的方式实现需求,具体步骤如下:
1. 构造示例数据
先还原你的输入DataFrame:
import pandas as pd df = pd.DataFrame({ 'id': [1, 1, 2, 3, 3, 3], 'Label': ['A', 'B', 'C', 'D', 'E', 'F'] })
2. 为每个ID下的Label添加序号
用groupby.cumcount()给同一ID内的Label从1开始编号:
df['seq'] = df.groupby('id')['Label'].cumcount() + 1
3. 透视生成新列
以id为索引,seq为列名,Label为值做透视,之后重置索引并重命名列:
# 透视 pivot_df = df.pivot(index='id', columns='seq', values='Label').reset_index() # 重命名列 pivot_df.columns = ['id'] + [f'Label_{col}' for col in pivot_df.columns[1:]] # 空值填充为空字符串(匹配你的示例输出) result = pivot_df.fillna('')
最终输出
运行后result的结果就是你要的格式:
| id | Label_1 | Label_2 | Label_3 |
|---|---|---|---|
| 1 | A | B | |
| 2 | C | ||
| 3 | D | E | F |
内容的提问来源于stack exchange,提问作者Omar14
相关产品推荐
相关产品推荐

