Pandas—如何将类型和值列枢轴转换为每种类型的新列



我有一个pandas数据框架,用于存储不同参数配置的不同指标的值,例如:

index | param1 | params2 | metric | score | 
0   |   xx   |   yy    |  XXX   |  100  |
1   |   xx   |   yy    |  YYY   |   50  |
2   |   xx   |   yy    |  ZZZ   |   20  |
3   |   aa   |   bb    |  XXX   |  200  |
4   |   aa   |   bb    |  YYY   |   50  |
5   |   aa   |   bb    |  ZZZ   |   10  |

我想把它转换成:

index | param1 | params2 | XXX  | YYY  | ZZZ | 
0   |   xx   |   yy    |  100 |  50  |  20 |
1   |   aa   |   bb    |  200 |  50  |  10 |

我试着用pivot来做,也就是

df.pivot(index='index',columns=['metric','param1','param2'],values='score')

但结果不是我想要的。此外,我对聚合这些值不感兴趣,只是重塑它们。

您可以使用pd.pivot_table():

df.set_index('index',inplace=True)
pd.pivot_table(df,index=['param1','params2'],columns='metric',values='score').reset_index()

打印:

metric param1 params2  XXX  YYY  ZZZ
0          aa      bb  200   50   10
1          xx      yy  100   50   20

可以使用

df = pd.DataFrame({
'index': [0, 1, 2, 3, 4, 5],
'param1': ['xx', 'xx', 'xx', 'aa', 'aa', 'aa'],
'param2': ['yy', 'yy', 'yy', 'bb', 'bb', 'bb'],
'metric': ['XXX', 'YYY', 'ZZZ', 'XXX', 'YYY', 'ZZZ'],
'score': [100, 50, 20, 200, 50, 10]
})
df.pivot_table(index=['param1', 'param2'],columns='metric',values='score').reset_index()

最新更新