python - 将多个变量转换为一列并使用熊猫创建匹配值列
问题描述
我有一个格式如下的表:
国家 | 国内生产总值 | 生活经验 |
---|---|---|
美国 | 6.5 | 75 |
英国 | 9.5 | 78 |
意大利 | 5.5 | 80 |
我需要将上面的表格更改为下面表格的格式。这只是实际表格的一小部分,因此不幸的是,硬编码不会削减它。
国家 | 指标名称 | 价值 |
---|---|---|
美国 | 国内生产总值 | 6.5 |
美国 | 生活经验 | 75 |
英国 | 国内生产总值 | 9.5 |
英国 | 生活经验 | 78 |
意大利 | 国内生产总值 | 5.5 |
意大利 | 生活经验 | 80 |
这是创建第一个表的代码:
import pandas as pd
df = pd.DataFrame({'Country':["USA", "UK", "Italy"],
'GDP':[6.5, 9.5, 5.5],
'LifeExp':[75,78,80]})
我以前从未在 stackoverflow 上上传过任何东西,所以我希望我已经为某人提供了足够的信息来帮助我解决这个问题。
提前致谢!
解决方案
您可以使用.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
。如果您希望它按升序排列,您可以简单地删除函数ascending=False
中的参数.sort_values()
。
推荐阅读
- c# - 将 json(javascript 对象)反序列化为 c# 对象
- javascript - Onclick 将 div 转换为输入字段并通过 ajax 发送更新的值
- regex - 正则表达式删除单个前导“1”,删除一个后有更多正则表达式
- mysql - 提供给函数 st_geometryfromwkb 的 GIS 数据无效
- python - ElementNotInteractableException:消息:尝试使用 Selenium 和 Python 单击元素时无法将元素滚动到视图中
- spring-boot - Rabbit MQ org.springframework.amqp.AmqpIOException: java.net.UnknownHostException
- python - 使用来自 MySQL 的数据刷新烧瓶更新
- java - Java:使用派生字体不会改变字体大小
- oracle - 查找所有子分区名称
- python - 恢复已保存的模型并评估新的 Tensorflow 数据对象