根据条件将两列与 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)的主要内容,如果未能解决你的问题,请参考以下文章