【问题标题】:Apply a lambda function to iterate over two columns应用 lambda 函数迭代两列
【发布时间】:2020-11-20 09:29:08
【问题描述】:

我有一只熊猫 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: ('一个Series的真值不明确。使用a.empty, a.bool(), a.item(), a.any() or a.all().', '发生在索引 61 - 90')

【问题讨论】:

  • >>> df.isna().all(axis=1) ?

标签: python-3.x pandas lambda


【解决方案1】:

你为什么不这样做:

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

【讨论】:

  • 太棒了!我不知道 .notnull() 方法!谢谢!
【解决方案2】:

在数据帧上使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2018-01-20
    • 2017-07-27
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多