如果df中的列中存在True或False值,则创建新列

2024-06-02 11:40:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的df中有一列如下所示:

Service
DoorDash, Grubhub / Seamless, UberEats, Postmates
DoorDash, UberEats, Caviar, Tock
DoorDash
None
Caviar, Tock
None
Tock
DoorDash, Grubhub / Seamless, UberEats, Postmates
Grubhub / Seamless, UberEats

是否有一种有效的方式可以为每个服务创建一个新列,如果服务列中存在该服务,则新列中的值将是True或False的布尔值

如果我有一个服务名称列表,例如:

DoorDash,Grubhub/无缝,优步,鱼子酱,邮递,JustEat,Deliverio,Foodora,Grab,Talabat

我想为上面列表中的每个名称创建一列,并根据服务列中是否存在该服务,将其值设置为True或False

预期输出:

Service                                            |  DoorDash | Grubhub / Seamless | UberEats| Caviar | Postmates | JustEat | Deliveroo | Foodora | Grab | Talabat | Tock      
 DoorDash, Grubhub / Seamless, UberEats, Postmates     True          True                True     False    True        False     False      False     False  False     False
 DoorDash, UberEats, Caviar, Tock                      True          False               True     True     False       False     False      False     False  False     True
 DoorDash                                              True          False               False    False    False       False     False      False     False  False     False
 None                                                  False         False               False    False    False       False     False      False     False  False     False
 Caviar, Tock                                          False         False               False    True     False       False     False      False     False  False     True
 None                                                  False         False               False    False    False       False     False      False     False  False     False
 Tock                                                  False         False               False    False    False       False     False      False     False  False     True 
 DoorDash, Grubhub / Seamless, UberEats, Postmates     True          True                True     False    True        False     False      False     False  False     False
 Grubhub / Seamless, UberEats                          False         True                True     False    False       False     False      False     False  False     False

谢谢你的关注


Tags: 名称nonefalsetrue列表servicetockseamless
1条回答
网友
1楼 · 发布于 2024-06-02 11:40:44

^{}与convert to boolean一起使用,按^{}中的列表添加缺少的值,最后添加到原始值:

L = ['DoorDash', 'Grubhub / Seamless', 'UberEats', 'Caviar', 
     'Postmates', 'JustEat', 'Deliveroo', 'Foodora', 'Grab', 'Talabat']
df1 = (df.join(df['Service'].str.get_dummies(', ')
                            .astype(bool)
                            .reindex(L, axis=1, fill_value=False)))

print (df1)
                                             Service  DoorDash  \
0  DoorDash, Grubhub / Seamless, UberEats, Postmates      True   
1                   DoorDash, UberEats, Caviar, Tock      True   
2                                           DoorDash      True   
3                                               None     False   
4                                       Caviar, Tock     False   
5                                               None     False   
6                                               Tock     False   
7  DoorDash, Grubhub / Seamless, UberEats, Postmates      True   
8                       Grubhub / Seamless, UberEats     False   

   Grubhub / Seamless  UberEats  Caviar  Postmates  JustEat  Deliveroo  \
0                True      True   False       True    False      False   
1               False      True    True      False    False      False   
2               False     False   False      False    False      False   
3               False     False   False      False    False      False   
4               False     False    True      False    False      False   
5               False     False   False      False    False      False   
6               False     False   False      False    False      False   
7                True      True   False       True    False      False   
8                True      True   False      False    False      False   

   Foodora   Grab  Talabat  
0    False  False    False  
1    False  False    False  
2    False  False    False  
3    False  False    False  
4    False  False    False  
5    False  False    False  
6    False  False    False  
7    False  False    False  
8    False  False    False  

相关问题 更多 >