使用 pandas 将过滤器列表应用到来自列表的数据帧

2023-12-20

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

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

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

我认为需要列表理解来创建mask然后np.logical_and.reduce https://stackoverflow.com/q/20528328/2901002用于减少和最后过滤boolean indexing http://pandas.pydata.org/pandas-docs/stable/indexing.html#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

EDIT:

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

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pandas 将过滤器列表应用到来自列表的数据帧 的相关文章

随机推荐