首页 > 解决方案 > 通过循环熊猫使用另一个数据帧过滤一个数据帧

问题描述

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

可乐 col_b
50
bb 132
dd 543

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

可乐 col__b col_x col_y col_z
xy xy xy 2
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_b col_x col_y col_z
xy xy xy 2
xy xy xy 3

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

可乐 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

我不知道如何实现这一点,所以我将不胜感激。

标签: pythonpandasdataframe

解决方案


您可以遍历您的唯一列值,然后根据每个唯一值过滤您的 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

推荐阅读