根据ID的列值创建一个新列

时间:2018-11-21 03:04:01

标签: python pandas

请帮助我解决此问题。我在网上搜索,但找不到解决方案。

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 

非常感谢您。

1 个答案:

答案 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