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

Man*_*udi 3 python list filter dataframe pandas

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

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

df_result= df[(df[filterfieldList[0]] == filterValuesList[0]) & (df[filterfieldList[1]] == filterValuesList[1]) & (df[filterfieldList[2]] == filterValuesList[2])]
Run Code Online (Sandbox Code Playgroud)

但是随着时间的推移,我得到了一个新的要求,即过滤列表是动态的,我现在不知道如何做到这一点。就像有时,过滤器列表只有 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
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

我认为需要对 create 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
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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
Run Code Online (Sandbox Code Playgroud)