Skip to main content
 首页 » 编程设计

python之如何使用另一列列表中的特定元素填充数据框中的空列

2025年05月04日25arxive

有一个由人和订单组成的数据框......

person     order                                 elements 
Alice      [drink, snack, salad, fish, dessert]  5           
Tom        [drink, snack]                        2           
John       [drink, snack, soup, chicken]         4           
Mila       [drink, snack, soup]                  3           

我想知道顾客的主餐是什么。因此,我想添加另一列 [main_meal] 以便它成为我的 df。

person     order                               elements   main_meal 
Alice      [drink, snack, salad, fish, dessert]  5          fish 
Tom        [drink, snack]                        2          none 
John       [drink, snack, soup, chicken]         4          chicken 
Mila       [drink, snack, soup]                  3          none 

规则是,如果客户点了 4 餐或更多餐,则意味着第 4 个元素始终是主菜,所以我想从订单列的列表中提取第 4 个元素。如果它包含的元素少于 4 个,则将 'main_meal' 分配给 none。我的代码:

df['main_meal'] = '' 
if df['elements'] >= 4: 
     df['main_meal'] = df.order[3] 
else: 
     df['main_meal'] = 'none' 

它不起作用:

 ValueError                                Traceback (most recent call last) 
 <ipython-input-100-39b7809cc669> in <module>() 
     1 df['main_meal'] = '' 
     2 df.head(5) 
 ----> 3 if df['elements'] >= 4: 
       4     df['main_meal'] = df.order[3] 
       5 else: 
 
 ~\Anaconda\lib\site-packages\pandas\core\generic.py in __nonzero__(self) 
 1571         raise ValueError("The truth value of a {0} is ambiguous. " 
 1572                          "Use a.empty, a.bool(), a.item(), a.any() or  
 a.all()." 
 -> 1573                          .format(self.__class__.__name__)) 
 1574  
 1575     __bool__ = __nonzero__ 
 
 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

我的代码有什么问题?

请您参考如下方法:

使用str方法切片

In [324]: df['order'].str[3] 
Out[324]: 
0       fish 
1        NaN 
2    chicken 
3        NaN 
Name: order, dtype: object 

In [328]: df['main_meal'] = df['order'].str[3].fillna('none') 
 
In [329]: df 
Out[329]: 
  person                                 order  elements main_meal 
0  Alice  [drink, snack, salad, fish, dessert]         5      fish 
1    Tom                        [drink, snack]         2      none 
2   John         [drink, snack, soup, chicken]         4   chicken 
3   Mila                  [drink, snack, soup]         3      none