Python 基于多个NaN检查在df中创建新列
我正在尝试基于多个NaN检查创建派生列 Df 带衍生字段的Df D-如果A、B和C不是空的或NaN,则连接A、B、C中的值Python 基于多个NaN检查在df中创建新列,python,pandas,dataframe,null,Python,Pandas,Dataframe,Null,我正在尝试基于多个NaN检查创建派生列 Df 带衍生字段的Df D-如果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[
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()、a.any()或a.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
where检查条件如果列A、B、C
中的任何一列为空,则保留新列的值为空,否则取3列之和,并将其分配给名为D
的新列
cols = ['A','B','C']
df['D'] = np.where(df[cols].isnull().any(1),'',df[cols].astype(str).sum(1))
错误来自
和。改用和<代码>df[“A”].notna()&df[“B”].notna()&df[“C”].notna()
。(见)谢谢!它解决了我的错误。我可以知道什么时候我应该使用“&”和“and”?@yuzu,你能告诉我这个解决方案是否对你有效吗?
cols = ['A','B','C']
df['D'] = np.where(df[cols].isnull().any(1),'',df[cols].astype(str).sum(1))