Python 如何创建一个列作为其他两个列的函数?

Python 如何创建一个列作为其他两个列的函数?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个有两列的数据框。我想创建第三列,如果Col1为null,那么Col3=Col2,否则Col3=Col1*2 我试过: def myf(col1,col2): if pd.isnull(col1): return col2 else: return col1 * 2 df['col3'] = df.apply(lambda x: myf(df['col1'], df['col2']), axis= 1)

我有一个有两列的数据框。我想创建第三列,如果Col1为null,那么Col3=Col2,否则Col3=Col1*2

我试过:

    def myf(col1,col2):
       if pd.isnull(col1):
          return col2
       else:
          return col1 * 2

    df['col3'] = df.apply(lambda x: myf(df['col1'], df['col2']), axis= 1)
但我得到了一个错误,“级数的真值是模糊的”

我怎样才能解决这个问题? 我知道这是一个老生常谈的问题,但我那小小的、习惯于SQL的大脑仍然难以理解熊猫是如何工作的;也许我很笨,也许熊猫的文档很差,也许两者都有:)

我理解apply在数据帧的行/列基础上工作,applymap在数据帧上按元素工作,map在序列上按元素工作,我理解错误的产生是因为pd.isnull返回一个T/F数组

但是,我不确定在这样的情况下如何使用applymap或map,其中另外两列是我的输入


谢谢

需要将
df
更改为
x
中的
lambda函数
中的标量,而不是
系列
作为函数中的输入:

df['col3'] = df.apply(lambda x: myf(x['col1'], x['col2']), axis= 1)
另一个更快的解决方案是使用或:


您可以使用:



而是执行
df['Col3']=np.where(df.Col1.isnull(),df.Col2,df.Col1*2)
df['col3'] = df['col1'].mul(2).combine_first(df['col2'])
df['Col3'] = df['col2'].where(df['col1'].isnull(), df['col1']*2)
df.col1.mul(2).fillna(df.col2)
df = pd.DataFrame({
    'col1': [1, 2, pd.np.nan, 3, pd.np.nan],
    'col2': [2, pd.np.nan, 3, 2, pd.np.nan]
})

df['col3'] = df.col1.mul(2).fillna(df.col2)
df
#  col1   col2  col3
#0  1.0    2.0  2.0
#1  2.0    NaN  4.0
#2  NaN    3.0  3.0
#3  3.0    2.0  6.0
#4  NaN    NaN  NaN