Python中如何将分组数据第二列条目转置为独立列
解决方案
假设你的数据已经是按Company分组、按Revenue排序后的前3个Program,可以用Pandas的groupby+cumcount+pivot组合实现需求:
步骤1:准备示例数据(模拟你的输入结构)
import pandas as pd # 模拟已分组排序好的原始数据 df = pd.DataFrame({ 'Company': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'], 'Program': ['ProgA1', 'ProgA2', 'ProgA3', 'ProgB1', 'ProgB2', 'ProgB3', 'ProgC1', 'ProgC2'], 'Revenue': [1000, 800, 500, 1200, 900, 700, 1500, 1100] })
步骤2:为每个公司的Program添加排名序号
给每个公司内的Program按现有排序(你已按Revenue排好序)分配1、2、3的序号:
# 按Company分组,给每组内的行从1开始递增加序号 df['Rank'] = df.groupby('Company').cumcount() + 1
步骤3:透视转换为目标格式
把序号列转成独立的Program列,同时去掉Revenue字段:
# 生成透视表:行是Company,列是Rank,值为Program result = df.pivot(index='Company', columns='Rank', values='Program') # 重命名列名为"Program 1"这类格式 result.columns = [f'Program {col}' for col in result.columns] # 可选:把Company从索引转为普通列 result = result.reset_index()
处理不足3个Program的情况
如果部分公司只有2个或更少Program,对应列会显示NaN,可以用空字符串替换:
result = result.fillna('')
最终输出示例
| Company | Program 1 | Program 2 | Program 3 |
|---|---|---|---|
| A | ProgA1 | ProgA2 | ProgA3 |
| B | ProgB1 | ProgB2 | ProgB3 |
| C | ProgC1 | ProgC2 |
内容的提问来源于stack exchange,提问作者Joseph Mena
相关产品推荐
相关产品推荐

