Python Pandas如何将多列堆叠为单列同时保留指定列不变
解决方法
核心思路是先把A列设为行索引,再堆叠B、C列,就能保留A列和对应行的绑定关系,具体实现如下:
如果你的原始数据中空单元格是空白字符串,先替换为NaN适配stack()的默认逻辑:
import numpy as np df = df.replace('', np.nan)
核心处理代码:
res = df.set_index('A')[['B', 'C']].stack().reset_index(name='D')[['A', 'D']]
输出的res就是你需要的结果:
| A | D |
|---|---|
| 1 | p |
| 1 | q |
| 1 | q |
| 2 | p |
| 2 | p |
| 2 | q |
步骤说明
set_index('A'):将A列转为行索引,保证后续堆叠时A的值和对应行的B、C值绑定不丢失[['B', 'C']]:选中需要堆叠的两列,排除无关列stack():将列维度的B、C转为行维度,默认自动丢弃空值,刚好匹配跳过空单元格的需求reset_index(name='D'):将多级索引转回普通数据列,堆叠生成的值命名为D列- 最后
[['A', 'D']]筛选目标列,调整输出顺序
内容的提问来源于stack exchange,提问作者jexplore
相关产品推荐
相关产品推荐

