根据条件将两列与 nan 连接(python)

Posted

技术标签:

【中文标题】根据条件将两列与 nan 连接(python)【英文标题】:Concatenate two columns with nan based on condition (python) 【发布时间】:2022-01-06 18:13:16 【问题描述】:

我在 pandas DataFrame 中有两列,如下所示:

ColA ColB
a a b c
b a c
c NaN
NaN d e f
NaN NaN

我想连接 ColA 和 ColB 这样

如果 ColA 在 ColB 中,则保留 ColB 如果 ColA 不在 ColB 中,则将它们连接起来 如果其中一个是 NaN,则保留具有值的列 如果两者都是 NaN,则保留 NaN

我将如何在 Python 中对此进行编码,以使所需的输出如下所示:

ColA ColB ColC
a a b c a b c
b a c b a c
c NaN c
NaN d e f d e f
NaN NaN NaN

注意'a'代表一个单词'ab c'代表三个单词文本字符串

【问题讨论】:

【参考方案1】:

更新的答案(使用熊猫数据框): 好的,假设你做到了:

import numpy as np
import pandas as pd

你的DataFrame如下:

df
  ColA   ColB
0    a  a b c
1    b    a c
2    c    NaN
3  NaN  d e f
4  NaN    NaN

然后你定义你的组合函数:

def concat(row):
    a = row["ColA"]
    b = row["ColB"]
    if not pd.isnull(a) and pd.isnull(b):
        return a
    if pd.isnull(a) and not pd.isnull(b):
        return b
    if pd.isnull(a) and pd.isnull(b):
        return np.nan
    if a in b:
        return b
    else:
        return a + b

并将其应用于您的 DataFrame(每行):

df.apply(concat, axis="columns")

是什么导致了这个结果:

0    a b c
1     ba c
2        c
3    d e f
4      NaN
dtype: object

当然,你仍然可以考虑是否要在concat 中与+ 进行简单的串联,或者是否要添加空格等。 您通过以下方式获得最终结果:

df["ColC"] = df.apply(concat, axis="columns")

反复无常。

【讨论】:

感谢 Lukas,我已更新问题以指定数据结构是 pandas 数据框。 @ScottC 我相应地更新了我的答案。 非常感谢 Lukas...我将 concat 函数的最后一行修改为:return a + ' ' + b 这给了我在行 中输出所需的结果1: bac 其余的都很完美。这正是我所需要的——谢谢。我会赞成你的回答,但我没有足够的声望点。 @ScottC 不客气,儿子。

以上是关于根据条件将两列与 nan 连接(python)的主要内容,如果未能解决你的问题,请参考以下文章

将两列与另外两列匹配

如何将两列与数据合并,如果一列的单元格为空,则相邻的单元格已满?

在 Pandas 中将两列与 NaN 进行比较并获得差异

如何将两列数据框与 Nan 值结合起来? [复制]

python Pandas - 将两列连接为字符串

Pandas Python 中的条件乘法