通过循环pandas使用另一个数据帧过滤一个数据帧

时间:2021-07-21 16:45:32

标签: python pandas dataframe

我有两个数据框 df1df2df1 作为跨多行具有不同值的两列。它看起来类似于以下内容:

<头>
col_a col_b
aa 50
bb 132
dd 543

df2 具有与以下类似的结构:

<头>
col_a col__b col_x col_y col_z
aa xy xy xy 2
aa xy xy xy 3
bb xy xy xy 14
bb xy xy xy 9
bb xy xy xy 6
抄送 xy xy xy 0
抄送 xy xy xy 2
dd xy xy xy 0
dd xy xy xy 2

我想使用 df2 中的值通过循环过滤 df1,这样在循环的第一次迭代后,我最终得到以下结果:

<头>
col_a col_b col_x col_y col_z
aa xy xy xy 2
aa xy xy xy 3

第二次迭代后,我应该有以下内容:

<头>
col_a col_b col_x col_y col_z
bb xy xy xy 14
bb xy xy xy 9
bb xy xy xy 6

我不希望过滤永久修改 df2。后续迭代应根据 df2 的 col_a 中的值过滤 df1

我不知道如何实现这一点,所以我希望得到任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以遍历您的唯一列值,然后根据每个唯一值过滤您的 df2。如果 df1 值是唯一的,则不需要 drop_duplicates,但我将其包含在此玩具示例中以防万一:

df1 = pd.DataFrame({'col_a':['aa', 'bb']})
df2 = pd.DataFrame({'col_a':['aa', 'aa', 'bb', 'bb'], 'other column':[1, 2, 3, 4]})

for col_value in df1['col_a'].drop_duplicates():
    df_temp_filtered = df2[df2['col_a'] == col_value]

在第 2 轮中获得此 df_temp_filtered:

  col_a  other column
2    bb             3
3    bb             4