首页 > 解决方案 > 如果另外两列中有数据,则在 Pandas 中创建一个为 True 的新列

问题描述

在我的 pandas 数据集中,有两列(即 A 和 B)我希望从中创建第三列(C),如果 A 或 B 被填充,则该列是“真”。

我已经尝试了以下代码。但是,运行此代码后,C 列中的所有值都是“否”(表示 A 和 B 列中的所有单元格都是空的,但事实并非如此)。

df['C'] = C
C = []

for index, row in df.iterrows():
    if df['a'].isnull() is False:
        c.append("Yes")
    elif df['b'].isnull() is False:
        c.append("Yes")
    else:
        c.append("No")

我是 Python 的新手(和 StackOverflow 也是),所以如果有人有任何建议,他们将不胜感激。

谢谢!

标签: pythonpandas

解决方案


使用DataFrame.notnullwithDataFrame.any来检查 whenabnotnull,然后我们可以使用np.whereor来映射使用orSeries.map创建的布尔系列:YesNo

df['c'] = df[['a','b']].notnull().any(axis = 1).map({True:'Yes',False:'No'})

#alternative
#df['c'] = df[['a','b']].notnull().any(axis = 1).replace({True:'Yes',False:'No'})

#logic inverse
#df['c'] = df[['a','b']].notnull().any(axis = 1).map({True:'No',False:'Yes'})

或者

import numpy as np
df['c'] = np.where(df[['a','b']].notnull().any(axis = 1),'Yes','No')
#df['c'] = pd.np.where(df[['a','b']].notnull().any(axis = 1),'Yes','No')
#logic inverse
#df['c'] = np.where(df[['a','b']].notnull().any(axis = 1),'No','Yes')

推荐阅读