大熊猫:根据条件过滤df

时间:2020-10-22 12:02:59

标签: python python-3.x pandas dataframe

假设我有一个类似的数据框

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

      

1 个答案:

答案 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]