将多个变量转换为一列并使用 pandas 创建匹配值列

Converting multiple variables into one column and creating a matching values column using pandas

我有一个 Table,格式如下:

Country GDP LifeExp
USA 6.5 75
UK 9.5 78
Italy 5.5 80

我需要把上面的Table改成下面Table的格式。这只是实际 table 的一小部分,因此不幸的是,硬编码不会削减它。

Country Indicator name Value
USA GDP 6.5
USA LifeExp 75
UK GDP 9.5
UK LifeExp 78
Italy GDP 5.5
Italy LifeExp 80

这是创建第一个 Table 的代码:

import pandas as pd
df = pd.DataFrame({'Country':["USA", "UK", "Italy"],
                  'GDP':[6.5, 9.5, 5.5],
                  'LifeExp':[75,78,80]})

我以前从未在 Whosebug 上上传过任何东西,所以我希望我已经提供了足够的信息让别人帮助我解决这个问题。

提前致谢!

使用.stack().reset_index():

print(
    df.set_index("Country")
    .stack()
    .reset_index()
    .rename(columns={"level_1": "Indicator Name", 0: "Value"})
)

打印:

  Country Indicator Name  Value
0     USA            GDP    6.5
1     USA        LifeExp   75.0
2      UK            GDP    9.5
3      UK        LifeExp   78.0
4   Italy            GDP    5.5
5   Italy        LifeExp   80.0

可以使用.melt() with .sort_values(),如下:

(df.melt(id_vars='Country', var_name='Indicator name', value_name='Value')
   .sort_values('Country', ascending=False)
).reset_index(drop=True)




# Result

  Country Indicator name  Value
0     USA            GDP    6.5
1     USA        LifeExp   75.0
2      UK            GDP    9.5
3      UK        LifeExp   78.0
4   Italy            GDP    5.5
5   Italy        LifeExp   80.0

您可以选择 Country 列的排序顺序。如果你想要它升序排列,你可以简单地删除.sort_values()函数中的参数ascending=False