【问题标题】:pandas function with isin带有 isin 的熊猫函数
【发布时间】:2022-11-16 12:12:32
【问题描述】:

我有一个这样的数据框:

aa        bb  cc
[a, x, y] a   1
[b, d, z] b   2
[c, e, f] s   3
np.nan    d   4

我正在尝试像这样创建一个新列:

aa        bb  cc dd
[a, x, y] a   1  True
[b, d, z] b   2  True
[c, e, f] s   3  False
np.nan    d   4  False

我目前的解决方案是:

def some_function(row):
    if row['bb].isin(row['aa'])==True:
        return True
    return False
df['dd'] = df.apply(lambda row: some_function(row), axis=1)

但这会引发错误("'str' object has no attribute 'isin'", 'occurred at index 0')

我怀疑,因为在检查 isin 时我遗漏了一些东西。

本质上,我需要检查 bb 的 str 值是否在列 aa 中,每个单元格中都有一个列表。

关于如何做到这一点的任何想法?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您需要参数 in 来检查列表中的成员资格:

    df['dd'] = df.apply(lambda x: x.bb in x.aa, axis=1)
    print (df)
              aa bb  cc     dd
    0  [a, x, y]  a   1   True
    1  [b, d, z]  b   2   True
    2  [c, e, f]  s   3  False
    

    编辑:

    df['dd'] = df.apply(lambda x: (x.bb in x.aa) and (x.cc == 1), axis=1) 
    print (df)
              aa bb  cc     dd
    0  [a, x, y]  a   1   True
    1  [b, d, z]  b   2  False
    2  [c, e, f]  s   3  False
    

    或者:

    df['dd'] = df.apply(lambda x: x.bb in x.aa, axis=1) & (df['cc'] == 1)
    print (df)
              aa bb  cc     dd
    0  [a, x, y]  a   1   True
    1  [b, d, z]  b   2  False
    2  [c, e, f]  s   3  False
    

    编辑:

    df['dd'] = df.apply(lambda x: x.bb in x.aa if type(x.aa) == list else False, axis=1) 
    print (df)
              aa bb  cc     dd
    0  [a, x, y]  a   1   True
    1  [b, d, z]  b   2   True
    2  [c, e, f]  s   3  False
    4        NaN  d   4  False
    

    【讨论】:

    • 哦,谢谢@jezrael 如果它是条件逻辑呢?即仅当 df['cc']==1 时?
    • 啊谢谢!最后一个问题。你将如何处理缺失值? df['aa']中经常有空值。我已经用示例更新了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多