我有一个包含两列的数据框。我想创建第三列,如果 Col1 为空,则 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 的大脑仍然难以理解 pandas 的工作原理;也许我很笨,也许 pandas 的文档很差,也许两者都是:)
我知道 apply 在 DataFrame 的行/列基础上工作,applymap 在 DataFrame 上按元素工作,而 map 在 Series 上按元素工作,并且我知道出现错误是因为 pd.isnull 返回 T/F 数组。
但是,我不确定在这种情况下如何使用 applymap 或 map,其中另外两列是我的输入。
最佳答案
您可以使用fillna
:
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
关于python - 如何创建一个列作为其他两个列的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670170/