加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 与isin的pandas函数

发布时间:2020-12-20 12:03:53 所属栏目:Python 来源:网络整理
导读:我有一个这样的数据帧: aa bb cc[a,x,y] a 1[b,d,z] b 2[c,e,f] s 3np.nan d 4 我正在尝试创建一个这样的新列: aa bb cc dd[a,y] a 1 True[b,z] b 2 True[c,f] s 3 Falsenp.nan d 4 False 我目前的解决方案是: def some_function(row): if row['bb].isin(
我有一个这样的数据帧:

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,y] a   1  True
[b,z] b   2  True
[c,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’对象没有属性’isin’”,’发生在索引0′)

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

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

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

解决方法

您需要参数列表中的检查成员身份:

df['dd'] = df.apply(lambda x: x.bb in x.aa,axis=1)
print (df)
          aa bb  cc     dd
0  [a,y]  a   1   True
1  [b,z]  b   2   True
2  [c,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,z]  b   2  False
2  [c,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,f]  s   3  False

编辑:

df['dd'] = df.apply(lambda x: x.bb in x.aa if type(x.aa) == list else False,f]  s   3  False
4        NaN  d   4  False

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读