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

如何合并Pandas DataFrame中同名的userLabel列至单列?

解决Pandas中同名列合并问题

你之前的代码无效是因为:当DataFrame存在同名列时,直接通过ABC['userLabel']只会访问第一个匹配的列,你的fillna操作等于用列自身填充空值,完全没用到第二个userLabel列。

下面是两种可行的实现方法:

方法一:筛选+行填充(通用型)

无需依赖列的固定位置,适合任意数量同名列的场景:

import pandas as pd
import numpy as np

data = {'userLabel': ['a', '', 3, '', 'b'],
        'name':['abc', 'def', 'ghi', '', 'ijk'],
        'userLabel1': ['', '2', '', '4', '']}

ABC = pd.DataFrame(data).rename(columns={'userLabel1':'userLabel'})

# 筛选所有名为userLabel的列,先把空字符串转为NaN,再按行用非空值填充
ABC['userLabel'] = ABC.filter(like='userLabel').replace('', np.nan).bfill(axis=1).iloc[:, 0]
# 移除重复的userLabel列
ABC = ABC.loc[:, ~ABC.columns.duplicated()]

print(ABC)

方法二:指定列位置合并(精准型)

如果你明确知道两个userLabel列的位置,可以直接定位操作:

import pandas as pd
import numpy as np

data = {'userLabel': ['a', '', 3, '', 'b'],
        'name':['abc', 'def', 'ghi', '', 'ijk'],
        'userLabel1': ['', '2', '', '4', '']}

ABC = pd.DataFrame(data).rename(columns={'userLabel1':'userLabel'})

# 分别取出两个userLabel列,将空字符串转为NaN
col1 = ABC.iloc[:, 0].replace('', np.nan)
col2 = ABC.iloc[:, 2].replace('', np.nan)
# 合并:优先取第一列的值,第一列空时用第二列的值
ABC['userLabel'] = col1.combine_first(col2)
# 删除多余的userLabel列
ABC = ABC.drop(ABC.columns[2], axis=1)

print(ABC)

两种方法最终都会得到你预期的结果:

userLabel  name
0         a   abc
1         2   def
2         3   ghi
3         4      
4         b   ijk

内容的提问来源于stack exchange,提问作者Sakeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:57:10