将多个变量转换为一列并使用 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
。
我有一个 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
。