将过滤器列表应用于来自使用 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】:我认为创建mask
s 需要列表理解,然后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?