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
相关产品推荐
相关产品推荐

