如何用Pandas将DataFrame转为Date为索引、ID为列的格式?
DataFrame行列重塑问题及解决方案
问题描述
现有如下DataFrame:
Date Rez ID 2023-07-03 5.95 1 2023-07-03 49.9 3 2023-07-03 33.17 54 2022-11-17 5.38 1 2022-11-17 44.4 3 2022-09-02 23.39 54 2022-09-02 5.6 1 2022-09-02 46.5 3 2021-10-19 5.34 1 2021-10-19 44.6 3 2020-12-11 5.38 1 2020-12-11 44 3 2019-04-25 5.84 1 2019-04-25 1.7 205
需要将其转换为以Date为索引、ID值作为列,缺失值填充为NaN的形式,预期结果如下:
1 3 54 205 Date 2023-07-03 5.95 49.9 33.17 NaN 2022-11-17 5.38 44.4 NaN NaN 2022-09-02 5.6 46.5 23.39 NaN 2021-10-19 5.34 44.6 NaN NaN 2020-12-11 5.38 44 NaN NaN 2019-04-25 5.84 NaN NaN 1.7
尝试了df_sample.groupby(['ID','Date'])['Rez'].unique().to_frame().transpose()未得到预期结果,求正确实现方法。
正确实现方案
方法1:使用pivot方法
pivot是处理此类行列转换的直接方式,适合无重复(Date, ID)组合的场景:
result = df_sample.pivot(index='Date', columns='ID', values='Rez')
方法2:使用pivot_table处理潜在重复值
如果数据中存在同一(Date, ID)对应多个Rez值的情况,可以用pivot_table配合聚合函数(比如取第一个值、均值等):
# 以取第一个值为例,也可替换为'mean'/'sum'等聚合函数 result = df_sample.pivot_table(index='Date', columns='ID', values='Rez', aggfunc='first')
两种方法都会自动将不存在的(Date, ID)组合填充为NaN,完全匹配预期结果。
内容的提问来源于stack exchange,提问作者static
相关产品推荐
相关产品推荐

