You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转换Pandas DataFrame:合并年份列并拆分Series Name为多列

解决方案

你可以通过pandas的**融化(melt)和透视(pivot)**操作实现这个数据结构转换,步骤如下:

1. 数据准备与清洗

先导入pandas库,将你提供的字典转为DataFrame,并把原始数据中的'..'替换为标准缺失值,同时把年份列转为浮点型:

import pandas as pd

# 你的原始数据字典
data = {'Country Name': {0: 'Argentina', 1: 'Argentina', 2: 'Argentina'},
        'Series Name': {0: 'CO2 emissions (metric tons per capita)',
                        1: 'Electric power consumption (kWh per capita)',
                        2: 'Energy use (kg of oil equivalent per capita)'},
        '2010': {0: '4.0998122679475', 1: '2877.65265331343', 2: '1928.65235658729'},
        '2011': {0: '4.28094332027273', 1: '2929.07502855568', 2: '1952.05105293095'},
        '2012': {0: '4.26422362148416', 1: '3000.60352326565', 2: '1936.80353979442'},
        '2013': {0: '4.34212454655109', 1: '2967.37655805218', 2: '1967.02167752077'},
        '2014': {0: '4.20905330505396', 1: '3074.70207056563', 2: '2029.92282543737'},
        '2015': {0: '4.30185120706067', 1: '..', 2: '..'},
        '2016': {0: '4.20180210453832', 1: '..', 2: '..'},
        '2017': {0: '4.07139674183186', 1: '..', 2: '..'},
        '2018': {0: '3.9756664767256', 1: '..', 2: '..'},
        '2019': {0: '3.74054556792816', 1: '..', 2: '..'},
        '2020': {0: '..', 1: '..', 2: '..'},
        '2021': {0: '..', 1: '..', 2: '..'},
        '2022': {0: '..', 1: '..', 2: '..'}}

df = pd.DataFrame(data)
# 替换缺失值标记为标准NA
df = df.replace('..', pd.NA)
# 提取年份列并转为浮点型
year_cols = df.filter(regex='^\d{4}$').columns
df[year_cols] = df[year_cols].astype(float)

2. 融化年份列

用melt函数把所有年份列合并成单一Year列,保留Country Name和Series Name作为标识项:

melted_df = df.melt(
    id_vars=['Country Name', 'Series Name'],
    value_vars=year_cols,
    var_name='Year',
    value_name='Value'
)

3. 透视生成目标结构

通过pivot将Series Name的唯一值转为独立列,以Country Name和Year作为索引,最后重置索引让索引列变为普通列:

result_df = melted_df.pivot(
    index=['Country Name', 'Year'],
    columns='Series Name',
    values='Value'
).reset_index()

# 可选:简化列名(去掉括号内的说明文字)
result_df.columns = [col.split(' (')[0] if ' (' in col else col for col in result_df.columns]

执行后得到的result_df就是你要的结构,示例输出如下:

Country Name  Year  CO2 emissions  Electric power consumption  Energy use
0    Argentina  2010       4.099812                  2877.652653  1928.652357
1    Argentina  2011       4.280943                  2929.075029  1952.051053
2    Argentina  2012       4.264224                  3000.603523  1936.803540
...

内容的提问来源于stack exchange,提问作者Brie MerryWeather

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:17:36