【问题标题】:Python equivalent of the R operator "%in%"R 运算符“%in%”的 Python 等效项
【发布时间】:2014-10-02 02:28:45
【问题描述】:

这个 in 运算符的 python 等价物是什么?我试图通过仅在行中的列具有在我的列表中找到的值时才保留行来过滤熊猫数据库。

我尝试使用 any() 并且在这方面遇到了巨大的困难。

【问题讨论】:

  • @Jeff 将其作为答案发布。
  • 太漂亮了,正是我想要的。你知道用谷歌搜索“in”和特殊符号有多难。
  • 我看不出有什么难度。谷歌搜索“pandas in operator”提供pandas.pydata.org/pandas-docs/stable/indexing.html 作为第一次点击,并在该页面上对“in operator”进行文本搜索,让您立即找到您要查找的内容。
  • 我用谷歌搜索了 Python 而不是 pandas,我不知道这是 Pandas 特有的东西。

标签: python r pandas


【解决方案1】:

如果您只想使用 numpy 而不使用 panads(就像我的用例一样),那么您可以:

import numpy as np

x = np.array([1, 2, 3, 10])
y = np.array([10, 11, 2])
np.isin(y, x)

这相当于:

c(10, 11, 2) %in% c(1, 2, 3, 10)

请注意,最后一行仅适用于numpy >= 1.13.0,对于旧版本,您需要使用np.in1d

【讨论】:

    【解决方案2】:

    正如其他人指出的那样,基础 Python 的 in 运算符运行良好。

    myList = ["a00", "b000", "c0"]
    
    "a00" in myList
    # True
    
    "a" in myList
    # False
    

    【讨论】:

    • 但是需要一个原子左侧来产生匹配 R 的 %in% 在调用语义中的结果。例如。 ["a00", "node", "c0"] in myList 不是人们习惯 %in% 所期望的。
    【解决方案3】:

    FWIW:无需调用 pandas,这是在纯 python 中使用 for looplist compression 的答案

    x = [2, 3, 5] 
    y = [1, 2, 3]
    
    # for loop
    for i in x: [].append(i in y)
    
    Out: [True, True, False]
    
    
    # list comprehension
    [i in y for i in x]
    
    Out: [True, True, False]
    

    【讨论】:

      【解决方案4】:

      Pandas 与 R 文档的比较是 here

      s <- 0:4
      s %in% c(2,4)
      

      isin() 方法类似于 R %in% 运算符:

      In [13]: s = pd.Series(np.arange(5),dtype=np.float32)
      
      In [14]: s.isin([2, 4])
      Out[14]: 
      0    False
      1    False
      2     True
      3    False
      4     True
      dtype: bool
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-22
        • 2014-08-21
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多