Python Pandas:检查一列中的值是否存在于另一列的行子集中



我有一个包含 3 列的数据帧 df:"颜色"、"之前"、"之后"。 我需要检查"之后"列中的每个项目是否存在于每种颜色的"之前"列中。如果在颜色子集中找到值,我希望创建一个带有"True"的新列"is_present",如果没有,则创建"False"。

抱歉,如果不清楚,我添加了预期结果:

color      before       after  expected_result
0   yellow    product1    product5        True
1   yellow    product2    product6        True
2   yellow    product3    product7        True
3   yellow    product4    product8        True
4   yellow    product5    product9        True
5   yellow    product6   product10        True
6   yellow    product7   product11        True
7   yellow    product8   product12       False
8   yellow    product9   product13       False
9   yellow   product10   product14       False
10  yellow   product11   product15       False
11     red   product16   product16        True
12     red   product17  product 25       False
13     red   product18  product 26       False
14     red   product19  product 27       False
15     red   product20  product 28       False
16     red   product21   product21        True
17     red   product22   product22        True
18     red   product15   product24        True
19     red   product24   product23       False
20   green   product29   product33        True
21   green  product 33   product34        True
22   green   product31   product38        True
23   green   product32   product35        True
24   green   product33   product36        True
25   green   product34   product32        True
26   green   product35   product29        True
27   green   product36   product30       False
28   green   product37   product37        True
29   green   product38   product31        True

我尝试使用循环,搜索似乎运行正常,但似乎我在创建新列时有误(它删除了预览检查(。

我的解决方案部分有效:

for color in df['color'].unique():
df['is_present'] = df['after'].isin(df[df['color'] == color]['before'])
df

我的结果在这里

提前感谢您的帮助!

在 lambda 函数中使用带有Series.isinGroupBy.apply

df['is_present'] = (df.groupby('color', group_keys=False)
.apply(lambda x: x['after'].isin(x['before'])))

最新更新