【问题标题】:Filter one dataframe using another through a loop pandas通过循环熊猫使用另一个数据帧过滤一个数据帧
【发布时间】:2021-07-21 16:45:32
【问题描述】:

我有两个数据框 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
cc xy xy xy 0
cc xy xy xy 2
dd xy xy xy 0
dd xy xy xy 2

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

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。后续迭代应根据 df1 的 col_a 值过滤 df2

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

【问题讨论】:

  • 这能回答你的问题吗? Splitting dataframe into multiple dataframes
  • @AnuragDabas 不完全是因为虽然我想过滤数据框。我不拆分数据框。相反,我只想暂时过滤数据框,以便可以对其列进行一些算术运算,然后移至第二组数据框 2 中的值并再次执行相同操作。
  • 所以要根据df1的col_a过滤df2?

标签: python pandas dataframe


【解决方案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

【讨论】:

  • 感谢您的及时回复并帮助我解决了这个问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多