根据另一个数据集 (DF2) 中的变量在 DF1 中保留(过滤)观测值

keeping (filtering) observations in df1 based on a variable from another dataset (df2)

提问人:setareh seraj 提问时间:11/15/2023 最后编辑:Andrej Keselysetareh seraj 更新时间:11/15/2023 访问量:23

问:

我有一个大型数据集 (df1),每个用户有多个观测值(600 万行),我只想查看来自某些用户的观测值。选定的用户列表来自另一个数据集 (df2)(4000 个用户)。 DF1 包含 DF2 的所有内容。 下面是简化的示例:

df1:
   date_stata  hour user  
0  20mar2023     9  a              
1  20mar2023     9  a              
2  20mar2023     9  a              
3  20mar2023     9  b             
4  20mar2023     9  b
5  20mar2023    12  c
df2:
   date_stata  hour user  
0    a              
1    c              

我应该如何在 Python os Stata 中做到这一点?

我希望我的输出如下所示:

  date_stata  hour user  
0  20mar2023     9  a              
1  20mar2023     9  a              
2  20mar2023     9  a                           
3  20mar2023    12  c

我试过这个:

# Filter the DataFrame based on matching values in the "user" column
filtered_df = df.merge(df2[['user']], on='user', how='inner')

并给了我错误的结果

Python 联接 合并 过滤

评论


答:

1赞 SiP 11/15/2023 #1

如果没有适当的数据样本,就很难在代码中给出完整的答案,但总的来说。

  1. 仅在 df2 中的用户出现在 df1 中时,才创建一个逻辑掩码,该掩码为 True:

    logical_mask = df1['user'].isin(df2['user'])

  2. 使用掩码过滤 DF1:

    df_res = df1[logical_mask]

评论

0赞 setareh seraj 11/15/2023
谢谢你的帮助。我在问题中提供了示例。我尝试了你的代码,但结果是 # user 0 2 1 3 所以它基本上是给了我 df2,而我想要根据 df2 中用户列的内容过滤的 df1。
0赞 SiP 11/15/2023
您确定在第二行中您使用了 DF1 而不是 DF2 吗?