Python 如果在另外两列中有数据,则在另一列中创建新列

Python 如果在另外两列中有数据,则在另一列中创建新列,python,pandas,Python,Pandas,在我的pandas数据集中,有两列(即A和B),我希望从中创建第三列(C),如果A或B被填充,则该列为“True” 我已经试用了以下代码。但是,运行此代码后,C列中的所有值都是“否”(表示A列和B列中的所有单元格都为空,但情况并非如此) 我不熟悉Python(也不熟悉StackOverflow),所以如果有人有任何建议,我将不胜感激 谢谢大家! 使用with检查a或b何时不为空,然后我们可以使用or映射使用Yes或No创建的布尔序列: df['c'] = df[['a','b']].notnul

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

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

我不熟悉Python(也不熟悉StackOverflow),所以如果有人有任何建议,我将不胜感激

谢谢大家!

使用with检查
a
b
何时不为空,然后我们可以使用or映射使用
Yes
No
创建的布尔序列:

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'})


我建议在以下条件下使用
np.where

df['c'] = np.where((df['a'].isnull()) & (df['b'].isnull()),"No","Yes")
当然,您需要
将numpy导入为np

import pandas as pd

df = pd.DataFrame()
#df is the dataframe you are working with

# using dataframe indexing
df['c'] = (df['a'].isnull() & df['b'].isnull())

# using apply
df['c'] = df.apply(lambda row: False if pd.isna(df['a']) and  pd.isna(df['b']) else True ,axis=1)
然后尝试:

df['C'] = df[['A','B']].apply(f,axis=1)

当熊猫模块本身的别名是公认的时,为什么要调用数据帧
pd
?欢迎使用StackOverflow。请花点时间阅读这篇文章,以及如何提供答案,并相应地修改你的问题。这些关于如何提出一个好问题的提示可能也很有用。阅读熊猫文档。阅读熊猫文档。阅读Pandas文档。另外,当布尔值是一个东西时,为什么要使用字符串
'Yes'
'No'
?这是否回答了您的问题?格雷西亚斯,安瑟夫!没错,原来的那个是对的。如果其中任何一个不为空,则为是,否则为否您也可以通过
pd.np
从pandas内部访问numpy,假设pandas作为PDI导入,它在pandas 1.0.0@Emil Mirzayev中是新的吗?不,我已经使用了很长时间了。不确定他们是从哪个版本获得的,但他们已经拥有它很长时间了
import pandas as pd

df = pd.DataFrame()
#df is the dataframe you are working with

# using dataframe indexing
df['c'] = (df['a'].isnull() & df['b'].isnull())

# using apply
df['c'] = df.apply(lambda row: False if pd.isna(df['a']) and  pd.isna(df['b']) else True ,axis=1)
def f(x):
     if x[0].isna():
          return "Yes"
     elif x[1].isna():
          return "Yes"
     return "No"

df['C'] = df[['A','B']].apply(f,axis=1)
C = []

for index, row in df.iterrows():

    if(pd.isnull(row['a'])) and (pd.isnull(row['b'])):
        C.append("No")
    else:
        C.append("Yes")

df.insert(2, "C", C)