应用lambda函数迭代两列

时间:2020-07-30 15:29:28

标签: python-3.x pandas lambda

我有一个熊猫df:

pd.DataFrame({'61 - 90': [np.NaN, 14, np.NaN, 9, 34, np.NaN],
         '91 and over': [np.NaN, 10, np.NaN, 1, np.NaN, 9]})

我正在尝试应用lambda函数,如果记录的两个列都== np.NaN,则该函数返回False。我试图解决这个问题:

df['not_na'] = df[['61 - 90', '91 and over']].apply(lambda x: False if pd.isna(x) else True)

我收到的错误消息:

ValueError :(“系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。”,“发生于索引61-90')

2 个答案:

答案 0 :(得分:2)

为什么不这样做:

df['not_na'] = df[['61 - 90', '91 and over']].notnull().any(axis=1)

答案 1 :(得分:0)

在数据帧上使用lambda函数执行此操作用于逐元素操作。我们需要使用applymap

df[['61 - 90', '91 and over']].applymap(lambda x: False if pd.isna(x) else True)

applymap功能的文档位于下面的链接中 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.applymap.html