Pandas拆分字符串堆叠为新行时如何保留其他列原有数值
问题原因
你之前的代码对拆分堆叠后的结果执行了reset_index(drop=True),直接丢弃了拆分后内容和原行对应的索引关联。将长于原DataFrame的新A列直接赋值给原df的A列时,pandas会按位置强制对齐,导致B列数值和新A列错位。
解决方案
方案1:使用explode方法(Pandas 0.25及以上版本推荐,写法更简洁)
- 第一步将A列拆分为列表类型
- 第二步对A列执行爆炸操作,其余列会自动保留原行的对应数值
代码示例:
# 拆分A列为列表 df['A'] = df['A'].str.split('::tosplit::') # 拆分列表为独立行,保留原行其他列数值 df = df.explode('A').reset_index(drop=True)
方案2:沿用stack逻辑的修正写法
如果需要保留原有的stack实现逻辑,需要保留原索引用于和其他列对齐,不要直接丢弃索引后赋值:
# 拆分堆叠后保留原行索引,仅删除拆分生成的层级索引 split_a = df['A'].str.split('::tosplit::', expand=True).stack().reset_index(level=1, drop=True).rename('A') # 用原索引对齐替换A列,删除空值后重置全局索引 df = df.drop('A', axis=1).join(split_a).dropna(subset=['A']).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者3awny
相关产品推荐
相关产品推荐

