Pandas合并列至另一列赋值失效问题及优化实现咨询
问题原因与解决方案
为什么赋值后DataFrame行数没变化?
Pandas赋值时会严格匹配索引。你用concat(...)生成的Series是重置索引后的(0-3),但原df1的索引只有0-1。当把4行的Series赋值给df1['a']时,Pandas只会把索引匹配的0、1行对应的值更新,索引2、3的内容因为原DataFrame没有对应索引,直接被丢弃,所以原df1还是保留原来的2行。
简洁易读的实现方式(自动扩展行数并丢弃b列)
以下几种方法都能直接得到目标结果:
方法1:用concat直接构造新DataFrame
这是最直观且兼容新版本Pandas的写法:
import pandas as pd # 示例原数据结构 df1 = pd.DataFrame({'a': [1, 2], 'b': [3, 4]}) # 合并a、b列并重命名b为a,生成新的单列表格 df1 = pd.concat([df1['a'], df1['b'].rename('a')], ignore_index=True).to_frame(name='a')
方法2:利用stack扁平化列后重构
适合列数不多的场景,代码更简洁:
df1 = pd.DataFrame({'a': df1[['a', 'b']].stack().reset_index(drop=True)})
方法3:追加行后删除b列(适配含其他列的场景)
如果原df1还有其他需要保留的列,只想扩展a列并删掉b列:
# 将b列转为a列格式后追加到原表格 df1 = pd.concat([df1, df1[['b']].rename(columns={'b': 'a'})], ignore_index=True) # 删除b列 df1.drop('b', axis=1, inplace=True)
内容的提问来源于stack exchange,提问作者Syrupsystem
相关产品推荐
相关产品推荐

