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

Python中分组匹配实际值(y)与预测值(yhat)的分类数据处理

Pandas透视表无法匹配yhat与y的对应行

原始数据

TimePeriod  Groups  Entity  Category        Year    Quarter Predictions    Value
1/1/2021    CO       UK    Model_Q1_2022    2021    1          yhat     25379.12223
1/1/2021    CO       UK    Model_Q4_2021    2021    1          y        19915.88
1/1/2021    CO       UK    Model_Q3_2021    2021    1          y        19915.88
1/1/2021    CO       UK    Model_Q3_2021    2021    1          yhat     24199.99065
1/1/2021    CO       UK    Model_Q4_2021    2021    1          yhat     24308.29262
1/1/2021    CO       UK    Model_Q2_2021    2021    1          yhat     24627.24434
1/1/2021    CO       UK   Model_Q1_2022     2021    1          y        19915.88
1/1/2021    CO       UK    Model_Q2_2021    2021    1          y        19915.88

尝试的代码及问题

使用pivot_table时,虽生成了y和yhat列,但每个Category对应两行,无法将预测值与实际值匹配到同一行:

df.pivot_table(index=df.columns[:-2].tolist(), columns=['Predictions'], values='Value').reset_index().rename_axis(columns=None)

数据类型信息

<class 'pandas.core.frame.DataFrame'>
Int64Index: 8 entries, 19535 to 140390
Data columns (total 12 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   TimePeriod     8 non-null      object 
 1   Groups         8 non-null      object 
 2   Entity         8 non-null      object  
 5   Currency       8 non-null      object 
 6   Category       8 non-null      object 
 7   Year           8 non-null      int64  
 8   Quarter        8 non-null      int64  
 9   Predictions    8 non-null      object 
 10  Value          8 non-null      float64
dtypes: float64(1), int64(2), object(9)

期望输出

TimePeriod  Groups  Entity  Category        Year    Quarter    yhat       y
1/1/2021    CO       UK    Model_Q1_2022    2021    1       25379.12223 19915.88
1/1/2021    CO       UK    Model_Q2_2021    2021    1       24627.24434 19915.88
1/1/2021    CO       UK    Model_Q3_2021    2021    1       24199.99065 19915.88
1/1/2021    CO       UK    Model_Q4_2021    2021    1       24308.29262 19915.88

解决方案

问题根源在于index参数包含了Predictions列,导致透视时将其作为分组依据,拆分了行。只需将除Predictions和Value外的列设为索引即可:

方法一:修正pivot_table参数

# 明确指定索引列,排除Predictions和Value
index_cols = ['TimePeriod', 'Groups', 'Entity', 'Category', 'Year', 'Quarter']
result = df.pivot_table(index=index_cols, columns='Predictions', values='Value').reset_index().rename_axis(columns=None)

方法二:使用pivot方法(更高效)

若每个分组下y和yhat唯一,用pivot更简洁:

result = df.pivot(index=['TimePeriod', 'Groups', 'Entity', 'Category', 'Year', 'Quarter'],
                  columns='Predictions',
                  values='Value').reset_index().rename_axis(columns=None)

两种方法均可将同一分组的y和yhat合并到同一行,得到目标格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:05:20