如何基于含重复值的DATE列实现Pandas DataFrame长表转宽表?
基于含重复值的DATE列实现Pandas长表转宽表
完全可以实现,你的场景中count(即DATE列)与A列的组合是唯一的,直接用pivot或pivot_table就能完成转换,以下是具体实现方法:
步骤1:构造示例数据
import pandas as pd # 还原你提供的长表数据 df = pd.DataFrame({ 'count': ['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01', '2023-01-01', '2023-02-01', '2023-03-01', '2023-01-01'], 'A': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c'], 'B': [0, 11, 2, 11, 10, 10, 14, 7] })
方法1:使用pivot(适合无重复组合的场景)
pivot要求index和columns的组合唯一,你的数据刚好满足这个条件,直接调用即可:
wide_df = df.pivot(index='count', columns='A', values='B') # 调整表头和索引的名称,匹配你想要的格式 wide_df.columns.name = 'A' wide_df.index.name = 'count'
方法2:使用pivot_table(兼容存在重复组合的场景)
如果后续你的数据中出现count+A的重复组合,可以用pivot_table指定聚合逻辑(比如取第一个值、均值、求和等),同样能得到目标格式:
# 这里用aggfunc='first'表示取重复组合中的第一个值,可根据需求替换为'mean'/'sum'等 wide_df = df.pivot_table(index='count', columns='A', values='B', aggfunc='first') wide_df.columns.name = 'A' wide_df.index.name = 'count'
转换后的结果
两种方法都会得到你期望的宽表结构:
A a b c count 2023-01-01 0.0 10.0 7.0 2023-02-01 11.0 10.0 NaN 2023-03-01 2.0 14.0 NaN 2023-04-01 11.0 NaN NaN
内容的提问来源于stack exchange,提问作者prashanth manohar
相关产品推荐
相关产品推荐

