python - 如何使用另一列列表中的特定元素填充数据框中的空列?
问题描述
有一个由人和订单组成的数据框......
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 个元素始终是主菜,所以我想从 order 列的列表中提取第 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
推荐阅读
- swift - 如何使用相同的变量线程安全地制作多个函数
- php - HTML表格结果全部返回一行
- sql - 使用 PyRFC 直接运行 SQL 查询
- angular - Bootstrap 下拉菜单在 Angular 中不起作用
- docker - 如何将文件复制到 docker 映像?
- python - Python Reduce:参数顺序导致错误
- php - file_get_contents(https://www.google.com/recaptcha/api/siteverify):无法打开流:在 laravel 项目中
- sql - SQL:年份为零的最小日期
- api - 是否可以通过 API 在创建日期之前删除 Nexus 存储库上的 docker 图像?
- javascript - 为什么 module.export 设置多次?