基于多个NaN检查,在df中创建一个新列



我正在尝试创建一个基于多个NaN检查的派生列。

Df

A|B|C
NaN|23|dfs
NaN|NaN|dsdfs
1223|3423|234234
NaN|NaN|NaN

具有派生字段的DfD-如果A、B和C不为空或NaN,则连接A、B、C 中的值

A|B|C|D
NaN|23|dfs|""
NaN|NaN|dsdfs|""
1223|3423|234234|12233423234234
NaN|NaN|NaN|""

我试过下面的代码

df["D"] = np.where(df["A"].notna() and df["B"].notna() and df["C"].notna(), df["A"].map(str)+df["B"].map(str) + df["C"].map(str), "")

我得到的错误是级数的真值是模糊的。使用a.empty、a.bool((、a.item((、.any((或.all((

感谢您的帮助!非常感谢。

你可以试试这个。

# df = df.convert_dtypes() uncomment this to convert dtypes of all the columns to suitable data-types. 
(
df.assign(D=np.where(
df.isna().any(axis=1),
"",
df.astype(str).apply(''.join, axis=1) # or df.astype(str).sum(axis=1)
)
)
)

使用您显示的示例,请尝试以下操作。简单的解释是使用np.where,其中检查条件如果列A,B,C中的任何列为null,则保持新列的值为空,否则取3列的和并将其分配给名为D的新列。

cols = ['A','B','C']
df['D'] = np.where(df[cols].isnull().any(1),'',df[cols].astype(str).sum(1))

相关内容

  • 没有找到相关文章

最新更新