根据条件 (python) 用 nan 连接两列
Concatenate two columns with nan based on condition (python)
我在 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'表示一个字,'a b c' 表示一个文本字符串三个词
更新的答案(使用 pandas DataFrames):
好吧,假设你做到了:
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
中做一个+
的简单拼接,还是要加一个space等。
您通过以下方式获得最终结果:
df["ColC"] = df.apply(concat, axis="columns")
完了。
我在 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'表示一个字,'a b c' 表示一个文本字符串三个词
更新的答案(使用 pandas DataFrames): 好吧,假设你做到了:
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
中做一个+
的简单拼接,还是要加一个space等。
您通过以下方式获得最终结果:
df["ColC"] = df.apply(concat, axis="columns")
完了。