将两个列表合并为DataFrame并基于索引字符串切片透视
解决DataFrame透视需求:将年份转为列,保留Cohort为行索引
步骤说明与代码示例
首先假设你的原始DataFrame包含cohort、year和pct_error_avg三列(如果索引是复合结构,先通过reset_index()提取出这两列),以下是具体实现方式:
1. 构造示例数据(模拟你的场景)
import pandas as pd # 模拟你的输入数据 cohorts = ["FNCI 2.5", "FNCI 2.5", "FNCI 3.0", "FNCI 3.0", "FNCI 2.5"] years = [2020, 2021, 2020, 2022, 2023] pct_error_avgs = [1.2, 2.3, 0.8, 3.1, 1.9] # 合并为DataFrame df = pd.DataFrame({ "cohort": cohorts, "year": years, "pct_error_avg": pct_error_avgs })
2. 使用pivot实现透视转换
直接用pivot方法指定行索引、列和值的对应关系,缺失年份会自动填充NaN:
# 透视处理:cohort为行,year为列,值为pct_error_avg pivoted_df = df.pivot( index="cohort", columns="year", values="pct_error_avg" ) # 可选:对年份列进行排序 pivoted_df = pivoted_df.sort_index(axis=1)
3. 处理重复数据的情况
如果你的数据中存在同一cohort+year的重复记录,改用pivot_table并指定聚合方式(比如取均值):
pivoted_df = df.pivot_table( index="cohort", columns="year", values="pct_error_avg", aggfunc="mean" # 根据需求选择聚合函数:sum、median等 )
最终效果示例
执行后你会得到类似这样的结果:
year 2020 2021 2022 2023 cohort FNCI 2.5 1.2 2.3 NaN 1.9 FNCI 3.0 0.8 NaN 3.1 NaN
内容的提问来源于stack exchange,提问作者hulio_entredas
相关产品推荐
相关产品推荐

