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

如何将DataFrame转换为以唯一国家名为表头、年份为行的格式?

解决方案:DataFrame转置并填充幸福指数

需求说明

将长格式的原始DataFrame转换为以年份为行、国家为列的宽格式表,对应位置填充该年份-国家组合的幸福指数,缺失组合显示NaN。

原始数据定义

import pandas as pd
import numpy as np

data = {
    'country_name': ['Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Afghanistan', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania', 'Albania'], 
    'year': [2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2021, 2022, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021], 
    'happiness_score' :[3.7235898971557617, 4.401778221130371, 4.758380889892578, 3.831719160079956, 3.782937526702881, 3.5721004009246826, 3.1308956146240234, 3.9828546047210693, 4.220168590545654, 2.6617181301116943, 2.694303274154663, 2.375091791152954, 2.4360344409942627, 1.2812711000442505, 4.634251594543457, 5.485469818115234, 5.268936634063721, 5.867421627044678, 5.510124206542969, 4.550647735595703, 4.81376314163208, 4.6066508293151855, 4.511100769042969, 4.639548301696777, 5.0044026374816895, 4.9953179359436035, 5.364909648895264, 5.255481719970703]
} 
df = pd.DataFrame(data)

高效实现方法

无需手动构建空表再填充,直接使用Pandas内置的pivot或pivot_table方法即可一步完成:

方法1:使用pivot(无重复年份-国家组合时首选)

pivot会自动提取唯一年份作为行、唯一国家作为列,并填充对应幸福指数,缺失值自动设为NaN:

# 生成目标结构并填充数据
df_result = df.pivot(index='year', columns='country_name', values='happiness_score').reset_index()

# 按年份排序(可选,确保顺序符合预期)
df_result = df_result.sort_values('year').reset_index(drop=True)

方法2:使用pivot_table(处理重复年份-国家组合)

如果存在同一国家同一年份有多个幸福指数的情况,可通过aggfunc指定聚合方式(如均值、求和等):

df_result = df.pivot_table(
    index='year',
    columns='country_name',
    values='happiness_score',
    aggfunc='mean'  # 可替换为'sum'/'first'等
).reset_index().sort_values('year').reset_index(drop=True)

最终结果示例

转换后的表格结构如下(截取部分行):

yearAfghanistanAlbania
2007NaN4.634252
20083.723590NaN
20094.4017785.485470
20104.7583815.268937

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:41:04