我想修改我的数据,使用熔体和桌子枢轴。
我有这个数据:
df = pd.DataFrame({'Pays': {0: 'France', 1: 'France', 2: 'France'},
'Indicateur': {0: 'Internet', 1: 'Pop', 2: 'Eco'},
'1990': {0: 1, 1: 2, 2: 3},
'1995': {0: 7, 1: 8, 2: 9}})
df我用熔盐把列收集成几行:
df = pd.melt(df, id_vars =['Pays','Indicateur'], value_vars =['1990','1995'],
var_name ='Years', value_name ='valeur')
df我把“指南人”的行分成几列:
df2 = df.pivot(columns='Indicateur',values='valeur')
df2我希望得到这样的结果:
你知道怎么做吗?
谢谢!
发布于 2022-02-14 13:14:59
首先,如果需要所有年份,在value_vars中DataFrame.melt中定义的年份不是必需的:
df = df.melt(id_vars =['Pays','Indicateur'], var_name ='Years', value_name ='valeur')还需要在index中定义DataFrame.pivot参数,最后通过DataFrame.reset_index将MultiIndex转换为列,然后通过DataFrame.rename_axis删除column name。
df2 = (df.pivot(index=['Pays', 'Years'], columns='Indicateur',values='valeur')
.reset_index()
.rename_axis(columns=None))
print(df2)
Pays Years Eco Internet Pop
0 France 1990 3 1 2
1 France 1995 9 7 8编辑:如果需要相同的格式,如融化的DataFrame:
df1 = df[['Pays','Years']].join(df.set_index('Indicateur', append=True)['valeur'].unstack())
#or using your solution
df1 = df[['Pays','Years']].join(df.pivot(columns='Indicateur',values='valeur'))
print(df1)
Pays Years Eco Internet Pop
0 France 1990 NaN 1.0 NaN
1 France 1990 NaN NaN 2.0
2 France 1990 3.0 NaN NaN
3 France 1995 NaN 7.0 NaN
4 France 1995 NaN NaN 8.0
5 France 1995 9.0 NaN NaNhttps://stackoverflow.com/questions/71112465
复制相似问题