请帮助我解决此问题。我在网上搜索,但找不到解决方案。
df
Id Fruit
1 Apple
1 Carrot
2 Apple
3 Carrot
list = [fruit, vegetable, both]
问题是,如果ID的水果列中包含苹果或胡萝卜,该如何分配每个ID。如果id包含苹果,则为ID 1分配水果,如果仅是胡萝卜,则分配蔬菜,如果两者都都分配。
我尝试按行使用str.contains,但是没有ID列。
结果
Newdf
Id Fruit New_col
1 Apple Both
1 Carrot Both
2 Apple Fruit
3 Carrot Vegetable
非常感谢您。
答案 0 :(得分:1)
首先进行map
,然后我们仅使用transform
nunqiue
来发现位置应为“两个”
s=df.Fruit.map({'Apple':'Fruit','Carrot':'Vegetable'})
mask=s.groupby(df.Id).transform('nunique').eq(2)
s[mask]='both'
df['New']=s
df
Out[190]:
Id Fruit New
0 1 Apple both
1 1 Carrot both
2 2 Apple Fruit
3 3 Carrot Vegetable