Python Pandas 如何将宽格式奖牌DataFrame转换为长格式堆叠表
Pandas宽表转长表解决方案
不需要手动遍历每年生成DataFrame,直接用pandas内置的melt函数即可高效实现需求,代码更简洁,性能也远高于循环遍历方案。
1. 先构造示例数据验证
import pandas as pd # 按照你给出的示例构造原始宽格式DataFrame df_wide = pd.DataFrame([ {"Year": 1896, "Country": "阿富汗", "Gold": 5, "Silver": 4, "Bronze": 3}, {"Year": 1896, "Country": "阿尔及利亚", "Gold": 1, "Silver": 2, "Bronze": 3} ])
2. 执行宽转长操作
df_long = df_wide.melt( # 保留不需要展开的标识列 id_vars = ["Year", "Country"], # 指定需要展开为行的奖牌列 value_vars = ["Gold", "Silver", "Bronze"], # 展开后的奖牌类型字段名 var_name = "medal", # 展开后的奖牌数量字段名 value_name = "no of medals" )
输出结果
最终得到的df_long就是你需要的长格式数据,样例如下:
| Year | Country | medal | no of medals |
|---|---|---|---|
| 1896 | 阿富汗 | Gold | 5 |
| 1896 | 阿尔及利亚 | Gold | 1 |
| 1896 | 阿富汗 | Silver | 4 |
| 1896 | 阿尔及利亚 | Silver | 2 |
| 1896 | 阿富汗 | Bronze | 3 |
| 1896 | 阿尔及利亚 | Bronze | 3 |
内容的提问来源于stack exchange,提问作者trigonocephalus
相关产品推荐
相关产品推荐

