我正在尝试创建一个基于多个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))