python - 用 NaN 连接 Pandas 中的两列

标签 python python-3.x pandas dataframe nan

我有这样一个数据框

df = (pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3'], 
                        'colA': ['A', 'B', 'C'], 
                        'colB': ['D', np.nan, 'E']}))

df

    ID  colA   colB
0   ID1 A      D
1   ID2 B      NaN
2   ID3 C      E

我想合并两列,但是如果 B 列为 NaN,则只保留 A 列。因此预期输出是

    ID  colA    colB    colC
0   ID1 A       D       A_D
1   ID2 B       NaN     B
2   ID3 C       E       C_E

最佳答案

想法是将 _ 添加到带有 _ 的第二列,因此在用空字符串替换缺失值后不会为缺失值添加 _:

df['colC'] = df['colA'] + ('_' + df['colB']).fillna('')
print (df)
    ID colA colB colC
0  ID1    A    D  A_D
1  ID2    B  NaN    B
2  ID3    C    E  C_E

如果不确定缺失值在哪里(在 colAcolB 中):

df['colC'] = (df['colA'].fillna('') + '_' + df['colB'].fillna('')).str.strip('_')

也可以分别测试每一列:

m1 = df['colA'].isna()
m2 = df['colB'].isna()

df['colC'] = np.select([m1, m2, m1 & m2], 
                        [df['colB'], df['colA'], np.nan], 
                        default=df['colA'] + '_' + df['colB'])
print (df)

    ID colA colB colC
0  ID1    A    D  A_D
1  ID2    B  NaN    B
2  ID3  NaN    E    E
3  ID4  NaN  NaN  NaN

关于python - 用 NaN 连接 Pandas 中的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57112352/

相关文章:

python - 我应该在另一个进程/线程中调用我的异步函数吗?

python - 在 pandas 数据框中显示具有一个或多个 NaN 值的行

python - 如何在 py.test 中显示警告

javascript - AJAX 请求后从 Flask 返回错误消息并在 JavaScript 上处理它?

python - 无法在 python 中打开图像文件

python - 属性错误: 'RangedWeapon' object has no attribute 'owner'

python-3.x - 在 Python 3 asyncio 中处理大量并发连接

python - 获取线性回归模型的值误差

python - 在 matplotlib 中跨子图绘制分界线

python - 遍历嵌套列表并对每个元素进行操作