假设我有一个类似的数据框
A B
11 2 # PASS
22 4 # FAIL
33 5 # FAIL
44 4 # PASS
还有两个字典,如:
B_column_dct = {2: [2,3,5], 4: [33,22,121], 5: [1,2,3]} # the dict key will have multiple values in a list
A_column_dct = {11: [3], 22: [4], 33: [5], 44: [22]} # the dict key will always have a single value in a list
现在,我要过滤上面的数据帧,以便对于A和B列中的每个值,仅在以下情况下才应出现在df中: A_column_dct的值出现在B_column_dct的对应值中。
最终结果df:
A B
11 2
44 4
答案 0 :(得分:0)
很抱歉,但是我不能完全理解您试图创建的值和过滤后的df,主要是因为dict无法容纳重复的键(例如,在org df的B列中,该值4不能正常工作,我还是试图使其正常工作,以为它们在b_dict中的键4既代表了column-b值,但是在过滤后,我没有得出与您相同的结论df。无论如何,下面是我使用的代码(可能是我到目前为止编写的最长的单行代码,出于可读性考虑,我建议重新编写):
flat_a = list(set().union(*A_column_dct.values()))
flat_b = list(set().union(*B_column_dct.values()))
filtering = [(any(elem_a in flat_b for elem_a in A_column_dct[i])) and (any(elem_b in flat_a for elem_b in B_column_dct[j])) for i, j in zip(org_df["A"], org_df["B"])]
filtered_df = org_df[filtering]