Pandas使用pivot转换DataFrame 按Year为列取X值得到目标格式
问题原因
你之前使用df.pivot(columns='Year',values='X')没有得到预期结果,是因为没有指定行索引为Date列,方法会默认复用原DataFrame的行索引作为结果的行索引,最终会生成和原数据行数一致、大部分为缺失值的结果。
正确实现代码
可以直接使用带index参数的pivot方法,配合后续处理匹配目标格式:
# 基础转换 res = df.pivot(index='Date', columns='Year', values='X') # 填充缺失值为NA,删除Date索引列得到最终结果 final_res = res.fillna('NA').reset_index(drop=True)
如果你的数据中存在同年、同月、同Date的重复记录,可改用pivot_table指定聚合规则避免报错:
res = df.pivot_table( index='Date', columns='Year', values='X', aggfunc='first' # 重复时取第一条,可根据需求调整为mean、sum等 ) final_res = res.fillna('NA').reset_index(drop=True)
输出结果验证
运行后final_res的结构和你需要的目标格式完全一致:
| 2015 | 2016 | 2017 | 2018 |
|---|---|---|---|
| 0.21120733 | -1.2968733 | -1.5630698 | -7.94E-02 |
| 0.36878636 | -1.1575716 | -1.70889 | -2.91E-02 |
| 0.27969632 | -1.0049003 | -1.8548334 | NA |
如果需要输出为制表符分隔的纯文本格式,可以在最终结果上调用:
print(final_res.to_csv(sep='\t', index=False))
即可得到和你给出的示例完全一致的文本输出。
内容的提问来源于stack exchange,提问作者makarand kulkarni
相关产品推荐
相关产品推荐

