【问题标题】:Check if Python list elements are in a Pandas dataframe row检查 Python 列表元素是否在 Pandas 数据框行中
【发布时间】:2020-02-25 09:25:05
【问题描述】:

我的问题可能很简单,但我无法快速找到解决方案。 我有一个数据框“df”,我想检查列表“列表”中的元素是否存在于 df 的任何行中。

这是一个 df 示例:

这是 my_list 示例:

在这种情况下,我想获取 df 的第 2 行,因为 my_list 中的所有元素都存在于该行中。

谢谢

【问题讨论】:

  • 简单地说,将 df 视为您的数据框,df.iloc[2] 这里 2 是行索引。

标签: python-3.x pandas numpy dataframe


【解决方案1】:

你可以试试熊猫isin

df.loc[df.isin(my_list).astype(int).sum(axis=1) == len(my_list), :]

其中 my_list 是您要执行的搜索列表。

注意:如果您想要部分匹配,您可以使用该条件。

【讨论】:

    【解决方案2】:

    这是使用applymap的另一种方式:

    df.loc[df.applymap(lambda x: x in names).sum(1).eq(len(names))]
    
        Color  Number Code  Flag
    2  Yellow      19   ee     0
    

    【讨论】:

    • 我想知道它是否也将列表中元素出现的顺序与 df 行中的顺序相匹配。我的意思是背靠背订单,是否也检查过?
    【解决方案3】:

    之前有人问过类似的问题。 link to that question

    import pandas as pd
    
    df = pd.DataFrame({'Color':['Blue', 'Green', 'Yellow', 'Purple','Orange'], 
        'Number':[20, 21, 19, 18, 40],
        'Code':['ss', 'dd', 'ee', 'xx', 'tt'],
        'Flag':[1, 1, 0, 1, 0]
    })
    
    names = set(['Yellow', 0, 'ee'])
    
    m = [names.issubset(i) for i in df.values.tolist()]
    
    print(df[m])
    
    

    【讨论】:

    • print(df.loc[[names.issubset(i) for i in df.values.tolist()]])
    【解决方案4】:

    Image of code

    import pandas as pd
    data={'Color': ['Blue','Green','Yellow','Purple','Orange'],
          'Number':[20,21,19,18,40],
          'Code':['ss','dd','dd','xx','tt'],
          'Flag':[1,1,0,1,0]}
    df=pd.DataFrame(data)
    print(df)
    my_list=list(df.iloc[2])
    print(my_list)
    

    Output of code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2021-08-19
      • 2021-06-26
      • 2021-09-27
      • 2017-02-15
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多