Python DataFrame 格式转换:将长表数据转换为指定宽表结构
将长格式DataFrame转换为宽格式的实现方法
你可以用Pandas的pivot()方法快速完成长表到宽表的转换,以下是完整代码示例:
步骤1:构造原始长表数据
首先导入Pandas并创建对应的数据结构:
import pandas as pd # 原始长表数据 raw_data = { '国家或地区': ['Afghanistan', 'India', 'Pakisthan', 'Iceland', 'USA', 'Afghanistan', 'India', 'Pakisthan', 'Iceland', 'USA'], '年份': [2019, 2019, 2019, 2019, 2019, 2020, 2020, 2020, 2020, 2020], '贸易额(美元)': [10.00, 30.00, 13.00, 40.00, 51.00, 12.00, 45.00, 20.00, 34.00, 62.00] } df_long = pd.DataFrame(raw_data)
步骤2:转换为目标宽表
使用pivot()方法指定行、列和值的对应关系,再调整格式匹配需求:
# 核心转换逻辑:年份为行,国家为列,贸易额为填充值 df_wide = df_long.pivot( index='年份', columns='国家或地区', values='贸易额(美元)' ).reset_index() # 清理列名层级,避免多级索引 df_wide.columns.name = None # 将贸易额转为整数(匹配目标格式的整数显示) df_wide = df_wide.astype({ '年份': int, 'Afghanistan': int, 'India': int, 'Pakisthan': int, 'Iceland': int, 'USA': int })
转换后结果
执行代码后得到的宽表如下:
| 年份 | Afghanistan | India | Pakisthan | Iceland | USA |
|---|---|---|---|---|---|
| 2019 | 10 | 30 | 13 | 40 | 51 |
| 2020 | 12 | 45 | 20 | 34 | 62 |
补充说明
- 如果你的原始数据存在同一国家+年份的重复记录,可以改用
pivot_table()方法并指定聚合函数(比如aggfunc='sum')来处理重复值。 reset_index()是为了把年份从行索引转回普通列,和目标格式保持一致。
内容的提问来源于stack exchange,提问作者Anton Asiri
相关产品推荐
相关产品推荐

