将过滤器列表应用于来自使用 pandas 的列表的数据框

Posted

技术标签:

【中文标题】将过滤器列表应用于来自使用 pandas 的列表的数据框【英文标题】:Apply a list of filters to a dataframe coming from a list using pandas 【发布时间】:2018-09-01 20:13:42 【问题描述】:

我有一个列列表,用于在来自列表的数据框中应用过滤器。过滤器值来自另一个列表。

早些时候,当列表是固定的时,我使用以下语句来完成工作:

df_result= df[(df[filterfieldList[0]] == filterValuesList[0]) & (df[filterfieldList[1]] == filterValuesList[1]) & (df[filterfieldList[2]] == filterValuesList[2])]

但随着时间的推移,我收到了一个新要求,即过滤列表是动态的,我现在不知道该怎么做。有时,过滤器列表将只有 2 个要过滤的字段,有时是 3 或 5 个。 这种情况下如何进行过滤?

样本数据:

A             B            C                   D                 E
Project 1        Org_1     Directory        MSTR           Configuration    
Project 1        Org_1     Directory        MSTR          Unable to Login
Project 1       Org_1   Desktop Software    MSTR             Configuration
Project 1      Org_1    Desktop Software    MSTR           Configuration]
Project 1      Org_1    Directory           MSTR          Unable to Login

【问题讨论】:

你能添加一些数据样本吗? 好的,现在添加。请查看最后的问题描述。 或者修改我的示例DataFrame :) 【参考方案1】:

我认为创建masks 需要列表理解,然后np.logical_and.reduce 需要通过boolean indexing 减少和最后过滤:

filterfieldList = ['A','B','E']
filterValuesList = ['Project 1', 'Org_1', 'Unable to Login']

tups = zip(filterfieldList, filterValuesList)
df_result = df[np.logical_and.reduce([(df[i] == j) for i, j in tups])]
print (df_result)
           A      B          C     D                E
1  Project 1  Org_1  Directory  MSTR  Unable to Login
4  Project 1  Org_1  Directory  MSTR  Unable to Login

编辑:

如果需要每行组合多个过滤器:

filterfieldList = ['A','B','E', 'E']
filterValuesList = ['Project 1', 'Org_1', 'Unable to Login', 'Configuration']

f = pd.DataFrame('field': filterfieldList, 'val':filterValuesList)
f = f.groupby('field')['val'].apply(list)
print (f)
field
A                         [Project 1]
B                             [Org_1]
E    [Unable to Login, Configuration]
Name: val, dtype: object

df_result = df[np.logical_and.reduce([(df[i].isin(j)) for i, j in f.items()])]
print (df_result)
           A      B                 C     D                E
0  Project 1  Org_1         Directory  MSTR    Configuration
1  Project 1  Org_1         Directory  MSTR  Unable to Login
2  Project 1  Org_1  Desktop Software  MSTR    Configuration
4  Project 1  Org_1         Directory  MSTR  Unable to Login

【讨论】:

@MukulSharma - 超级 :) 在您的代码中是“np”“df[np.logical_and.reduce([(df[i] == j) for i, j in tups])]”是 numpy?还是代表其他任何东西? 免费使用pd.np或添加import numpy as np 感谢您的帮助!我得到了很好的结果:) @ManikanthaNekkalapudi - 很高兴能帮上忙!

以上是关于将过滤器列表应用于来自使用 pandas 的列表的数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?

将过滤器应用于列表后,TextWatcher 和 ListView 元素的位置出现问题

将过滤器应用于列表并显示数据

如何将 dplyr 过滤器应用于数据框列表?

将条件应用于列列表的数据框过滤

使用条件逻辑从 pandas df 创建多个列表