我需要使用 dict 过滤数据框,该字典以键为列名,值为要过滤的值构造:
filter_v = {'A':1, 'B':0, 'C':'This is right'}
# this would be the normal approach
df[(df['A'] == 1) & (df['B'] ==0)& (df['C'] == 'This is right')]
但我想在线上做点什么
for column, value in filter_v.items():
df[df[column] == value]
但这会多次过滤数据框,一次过滤一个值,而不是同时应用所有过滤器。有没有办法以编程方式进行?
编辑:一个例子:
df1 = pd.DataFrame({'A':[1,0,1,1, np.nan], 'B':[1,1,1,0,1], 'C':['right','right','wrong','right', 'right'],'D':[1,2,2,3,4]})
filter_v = {'A':1, 'B':0, 'C':'right'}
df1.loc[df1[filter_v.keys()].isin(filter_v.values()).all(axis=1), :]
给
A B C D
0 1 1 right 1
1 0 1 right 2
3 1 0 right 3
但预期的结果是
A B C D
3 1 0 right 3
只应选择最后一个。
原文由 Ivan 发布,翻译遵循 CC BY-SA 4.0 许可协议
IIUC,你应该能够做这样的事情:
这是通过制作一个系列来比较的:
选择
df1
的对应部分:找到它们匹配的地方:
找到它们 都 匹配的地方:
最后使用它来索引 df1: