You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:20:54