【发布时间】:2017-10-10 15:09:54
【问题描述】:
我有一个包含两列的数据框。我想创建第三列,如果 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,其中另外两列是我的输入。
谢谢!
【问题讨论】:
-
改为
df['Col3'] = np.where(df.Col1.isnull(), df.Col2, df.Col1*2)