如何将Pandas DataFrame pivot为行数等于最大类别长度的结构?
实现方案
核心思路是给每个类别下的行生成组内序号,再通过pivot实现按序填充的宽表,具体步骤如下:
- 构造示例数据(可替换为你的实际DataFrame)
import pandas as pd data = { 'catYM': ['202301', '202301', '202302', '202302', '202302', '202303'], 'prod': [100, 200, 150, 250, 300, 50] } df = pd.DataFrame(data)
- 生成组内行号
给每个catYM分组,用cumcount()生成组内从0开始的序号,标记每个类别下每行的位置:
df['row_id'] = df.groupby('catYM').cumcount()
- 执行pivot重塑
以组内行号为索引,catYM为列,prod为值做pivot,最终行数会自动匹配所有类别中的最大行数,每个类别下的数值按顺序填充:
result_df = df.pivot(index='row_id', columns='catYM', values='prod').reset_index(drop=True)
最终输出结果:
catYM 202301 202302 202303 0 100.0 150.0 50.0 1 200.0 250.0 NaN 2 NaN 300.0 NaN
如果需要把NaN替换为特定值(比如0),可追加:
result_df = result_df.fillna(0)
内容的提问来源于stack exchange,提问作者b2405
相关产品推荐
相关产品推荐

