Python 如何创建一个列作为其他两个列的函数?
我有一个有两列的数据框。我想创建第三列,如果Col1为null,那么Col3=Col2,否则Col3=Col1*2 我试过: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)
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