繁体   English   中英

根据在另一个 dataframe 中匹配/包含特定列的值过滤 dataframe

[英]Filter a dataframe based on values matching/containing in particular column in another dataframe

我有一个 df1,其中包含一个名为 Id 的列,而另一个 df2 具有一个名为 Test_Ids_flow 的列,其中包含许多 Id(一些包含在 df1 中,一些不包含)。 我只需要过滤掉 df2 中包含 df1 中的 Id 的那些行。

df = pd.DataFrame({'Id':["42","75","36","12"],
                    'Name':['Apple','Strawberry','Banana','Pear']})


df2 = pd.DataFrame({'Test_Ids_Flow':["42,4,6,10","4,8,3,9","4,8,5,75","1,6,12,90","5,36,10,94","6,4,3,60","18,25,65,72"]})

在此处输入图像描述

您可以尝试使用pd.DataFrame.str.split(',')获取 id 列表,然后使用pd.Series.isinpd.Series.any()检查列表是否包含至少一个元素df.Id的:

mask=df2['Test_Ids_Flow'].str.split(',').apply(lambda x: df.Id.isin(x).any())
#Same as:   mask=[df.Id.isin(l).any()  for l in df2['Test_Ids_Flow'].str.split(',')]
  
df2[mask]

如同:

df2[df2.Test_Ids_Flow.str.split(',', expand=True).isin(df.Id.tolist()).any(1)]

Output:

 Test_Ids_Flow
0     42,4,6,10
2      4,8,5,75
3     1,6,12,90
4    5,36,10,94

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM