You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:将DataFrame的IndicatorName类别转为列并保留其余数据

解决方法:将IndicatorName转为列并保留所有原有列

你需要用pivot方法来实现需求,它会自动根据指定的索引列对齐数据,保留所有原有字段的同时,把IndicatorName的类别转为新列。

代码实现

import pandas as pd

# 构造你的示例数据
data = {
    'Time': ['2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01', '2021-10-01'],
    'Groups': ['KRO CO']*5,
    'Entity': ['P_GA']*5,
    'GC': [None]*5,
    'Seg': ['Model_Q2_2021']*5,
    'Year': [2021]*5,
    'Quarter': [2,3,3,3,4],
    'IndicatorName': ['yhat','yhat','yhat','y','y'],
    'Value': [568759.481223, 586003.965652, 583703.420655, 608601.857510, 628928.602344]
}
df = pd.DataFrame(data)

# 执行pivot操作,指定索引为所有需要保留的列
pivoted_df = df.pivot(
    index=['Time', 'Groups', 'Entity', 'GC', 'Seg', 'Category', 'Year', 'Quarter'],
    columns='IndicatorName',
    values='Value'
).reset_index()

# 移除列名的层级标识(可选,让列名更简洁)
pivoted_df.columns.name = None

print(pivoted_df)

输出结果

Time Groups Entity    Seg       Category  Year  Quarter         y       yhat
0  2021-06-01  KRO CO   P_GA  None  Model_Q2_2021  2021        2       NaN  568759.48
1  2021-07-01  KRO CO   P_GA  None  Model_Q2_2021  2021        3       NaN  586003.97
2  2021-08-01  KRO CO   P_GA  None  Model_Q2_2021  2021        3       NaN  583703.42
3  2021-09-01  KRO CO   P_GA  None  Model_Q2_2021  2021        3  608601.86        NaN
4  2021-10-01  KRO CO   P_GA  None  Model_Q2_2021  2021        4  628928.60        NaN

特殊情况处理

如果你的数据中存在同一索引组合对应多个相同IndicatorName的重复数据,改用pivot_table并指定聚合函数即可:

pivoted_df = df.pivot_table(
    index=['Time', 'Groups', 'Entity', 'GC', 'Seg', 'Category', 'Year', 'Quarter'],
    columns='IndicatorName',
    values='Value',
    aggfunc='mean'  # 可根据需求替换为sum、first、last等
).reset_index()
pivoted_df.columns.name = None

内容的提问来源于stack exchange,提问作者user3459293

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:25:15