为了账号安全,请及时绑定邮箱和手机立即绑定

如果 df 中的列的值是同一数据帧中另一列的值之一,则匹配

如果 df 中的列的值是同一数据帧中另一列的值之一,则匹配

慕无忌1623718 2021-09-02 14:43:47
dfcol1  col2A      a|x|yB      a|x|yC      c|x|zD      e|j|y我的目标是创建一个名为“status”的新列,以查看 col1 中的条目是否是 col2 中的条目之一(由管道分隔)。输出应该是这样的col1  col2     statusA      a|x|y   TrueB      a|x|y   FalseC      c|x|z   TrueD      e|j|y   False我的代码:df["col1"]= df["col1"].str.lower()df['status']=df['col1'].isin(df['col2']) 但这将“状态”列中的所有条目都设为 False请帮我解决这个问题,拜托!!!
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

与此答案类似,您可以使用列表理解。假设您的数据是干净的,例如没有空值。


zipper = zip(df['col1'], df['col2'])

df['status'] = [i.casefold() in j.casefold().split('|') for i, j in zipper]


print(df)


  col1   col2 status

0    A  a|x|y   True

1    B  a|x|y  False

2    C  c|x|z   True

3    D  e|j|y  False


查看完整回答
反对 回复 2021-09-02
?
www说

TA贡献1775条经验 获得超8个赞

也许您应该首先将数据框转换为更易于使用的格式。


我建议这样的事情:


>>> df = pd.concat([df['col1'], df['col2'].str.upper().str.split('|', expand=True)], axis=1)                                                                                                             

>>> df                                                                                                                                                                                                   

  col1  0  1  2

0    A  A  X  Y

1    B  A  X  Y

2    C  C  X  Z

3    D  E  J  Y

现在你可以这样做:


>>> df['status'] = df.apply(lambda s: s.duplicated().any(), axis=1)                                                                                                                                     

>>> df                                                                                                                                                                                                    

  col1  0  1  2  status

0    A  A  X  Y    True

1    B  A  X  Y   False

2    C  C  X  Z    True

3    D  E  J  Y   False

此解决方案假定您分隔的状态指示器'|'是唯一的,即您不能拥有类似'x|x|x'.


如果您不喜欢该建议,请考虑:


>>> df['status'] = df.apply(lambda row: row[0].lower() in row[1].split('|'), axis=1)                                                                                                                     

>>> df                                                                                                                                                                                                  

   col1   col2  status

0    A  a|x|y    True

1    B  a|x|y   False

2    C  c|x|z    True

3    D  e|j|y   False


查看完整回答
反对 回复 2021-09-02
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信