【问题标题】:comparing two Dataframe columns to check if they have same value in python比较两个 Dataframe 列以检查它们在 python 中是否具有相同的值
【发布时间】:2018-01-16 21:31:24
【问题描述】:

我有两个数据框,

new1.
      Name       city
 0    sri won    chn
 1    pechi won  pune
 2    Ram won    mum
 0    pec won    kerala

new3
    req
0   pec
1   mut

我试过了,

mask=new1.Name.str.contains("|".join(new3.req.values.tolist()))
new1[mask]

我明白了,

 new1[mask]
      Name       city
 1  pechi won    pune
 0  pec won      kerala

由于“pechi”包含“pec”,所以取这个值。但我想要不“包含”的值之间的完全匹配

我想要的输出是,

 new1[mask]
      Name       city
 0  pec won      kerala

【问题讨论】:

    标签: python pandas dataframe data-analysis


    【解决方案1】:

    分隔符需要空格

    In [1350]: new1
    Out[1350]:
            Name    city
    0    sri won     chn
    1  pechi won    pune
    2    Ram won     mum
    0    pec won  kerala
    
    In [1351]: new3
    Out[1351]:
       req
    0  pec
    1  mut
    
    In [1352]: ' | '.join(new3.req)
    Out[1352]: 'pec | mut'
    
    In [1353]: new1.Name.str.contains(' | '.join(new3.req))
    Out[1353]:
    0    False
    1    False
    2    False
    0     True
    Name: Name, dtype: bool
    
    In [1354]: new1[new1.Name.str.contains(' | '.join(new3.req))]
    Out[1354]:
          Name    city
    0  pec won  kerala
    

    【讨论】:

    • 它给出了相同的结果:(
    • 您现在可以查看示例流程。
    【解决方案2】:

    你需要\b,意思是“单词边界”:

    a = r'\b(' + "|".join(new3.req.values.tolist()) + r')\b'
    print (a)
    \b(pec|mut)\b
    
    mask=new1.Name.str.contains(a)
    df = new1[mask]
    print (df)
          Name    city
    0  pec won  kerala
    

    【讨论】:

    • 哇!,它工作得很好,你能解释一下第一行代码的作用吗???
    • 你可以查看this解释word boundary(我的英语很糟糕,尤其是深入解释)
    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    相关资源
    最近更新 更多