如何使用Pandas库转置世界银行数据?求助实现目标格式
解决Pandas宽表转长表的问题
你可以用Pandas的melt()函数实现这个宽表转长表的需求,这是处理这类结构转换最直接的工具。
具体步骤与代码
假设你的原始DataFrame df 结构如下(简化示例):
import pandas as pd # 模拟你的原始数据 data = { 'TOPIC': ['Inflation', 'Inflation'], 'COVENTRY': ['United Kingdom', 'Germany'], 'CODE': ['UK', 'DE'], 'CURRENCY': ['GBP', 'EUR'], 2000: [2.1, 1.5], 2001: [1.8, 1.2], 2002: [2.3, 1.7], 2003: [1.9, 1.4] } df = pd.DataFrame(data)
执行以下代码即可得到目标格式:
# 宽表转长表 df_transformed = df.melt( id_vars=['COVENTRY', 'CODE', 'CURRENCY'], # 保留的维度列 value_vars=[2000, 2001, 2002, 2003], # 需要转置的年份列 var_name='YEAR', # 转置后的年份列名 value_name='INFLATION' # 转置后的通胀值列名 ) # 可选:将YEAR列转为整数类型(如果原始年份列是字符串格式) df_transformed['YEAR'] = df_transformed['YEAR'].astype(int)
转换后的结果示例
| COVENTRY | CODE | CURRENCY | YEAR | INFLATION |
|---|---|---|---|---|
| United Kingdom | UK | GBP | 2000 | 2.1 |
| Germany | DE | EUR | 2000 | 1.5 |
| United Kingdom | UK | GBP | 2001 | 1.8 |
| Germany | DE | EUR | 2001 | 1.2 |
| ... | ... | ... | ... | ... |
补充说明
- 如果你的年份列是字符串格式(比如
'2000'),只需把value_vars改成对应的字符串列表即可,比如['2000', '2001', '2002', '2003'] - 如果原始数据里
TOPIC列包含其他值,但你只需要保留Inflation的行,可以先过滤:df = df[df['TOPIC'] == 'Inflation']再执行转换
内容的提问来源于stack exchange,提问作者okyay sönmez
相关产品推荐
相关产品推荐

