我有一个包含 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.isin
的GroupBy.apply
:
df['is_present'] = (df.groupby('color', group_keys=False)
.apply(lambda x: x['after'].isin(x['before'])))