我有两个数据框 df1
和 df2
。 df1
作为跨多行具有不同值的两列。它看起来类似于以下内容:
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
。
我不知道如何实现这一点,所以我希望得到任何帮助。
答案 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