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

如何从Pandas DataFrame中按年份提取行并转为列

问题:按年份重构Pandas DataFrame

我有一个以Pandas datetime类型为索引的DataFrame,包含2004年至2015年的温度极值数据(实际数据约16万行),简化版示例如下:

|     id        |    data_c
------------|---------------|---------------
date        |               |
2005-01-01  | USW00004848   | -17.777778
2005-01-02  | USC00207320   | 65.555556
2005-01-03  | USC00207320   | -23.888889
2006-01-01  | USW00014833   | -42.222222
2006-01-02  | USW00014833   |  0.555556
2006-12-31  | USC00200032   | -11.666667
2007-12-29  | USC00205050   | -27.222222
2007-12-30  | USC00208202   | -17.777778
2007-12-31  | USC00201250   | -21.111111
2008-12-3   | USC00200230   | -27.222222
2008-01-4   | USW00004848   | -17.777778
2008-01-5   | USC00207320   | 65.555556
2009-01-01  | USC00207320   | -23.888889
2009-01-02  | USW00014833   | -42.222222
2009-01-03  | USW00014833   | 0.555556
2010-12-3   | USC00200032   | -11.666667
2010-12-4   | USC00205050   | -27.222222
2010-12-5   | USC00208202   | -17.777778

我希望按年份提取行数据,并将对应值作为新列添加到同一个DataFrame中,最终效果如下:

2005         2006         2007        2008         2009
                
0   -17.777778   -42.222222   -27.222222  -27.222222   -23.888889
1    65.555556    0.555556    -17.777778   -17.777778  -42.222222
2   -23.888889   -11.666667   -21.111111   65.555556   0.555556

已知可以通过df.index.year==2005逐年手动筛选添加列,但想找更简便的方法。


解决方案

可以利用Pandas的groupby结合cumcount生成组内序号,再用pivot完成列转行的操作,步骤如下:

  1. 提取索引的年份作为新列year
  2. 为每个年份内的行生成连续序号idx(用于后续转列时对齐)
  3. 使用pivot将年份转为列,序号作为索引,data_c作为值

完整代码:

import pandas as pd

# 假设你的DataFrame名为df
df['year'] = df.index.year
df['idx'] = df.groupby('year').cumcount()
result = df.pivot(index='idx', columns='year', values='data_c')

# 如果需要去掉列名的名称(即"year"这个表头),可以加上:
result.columns.name = None

print(result)

代码说明:

  • df.index.year直接从datetime索引提取年份,无需手动判断
  • groupby('year').cumcount()为每个年份组内的行从0开始计数,保证同一年份的行按原有顺序生成序号
  • pivot函数自动将不同年份的data_c值按序号对齐,生成目标格式的DataFrame
  • 最后去掉列名的名称是为了和你期望的输出格式一致

这种方法无需手动遍历年份,代码简洁且效率高,适合处理大体积数据(比如你的16万行数据)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:16:01