python - Dataframe apply(func) 仅在一行上返回值
问题描述
我有这个数据框 df :
id order_exist ws_id ws_status_code order_id sql_status
19 False 9 50 19-9 None
19 False 10 50 19-10 None
19 False 11 50 19-11 None
19 False 12 29 19-12 None
19 False 13 0 19-13 None
19 True 14 20 19-14 None
19 False 15 0 19-15 None
19 True 16 35 19-16 None
19 True 17 20 19-17 None
我有一个元组列表,元组:
[('19-16', 'delivered'), ('19-17', 'waiting_shipment'), ('19-14', 'test'), ('19-14', 'test'), ( '27-1587739801134x592916474231783400', 'waiting_shipment')]
我有这个功能:
def ckeck_order_status(order_id,tuple):
for o in tuple:
if o[0] == order_id:
return o[1]
else:
return None
我跑:
df['sql_status'] = df.apply(lambda x: ckeck_order_status(x['order_id'],tuple),axis=1)
为什么我只将 order_id "19-16" 设置为已交付,而其他设置为相应状态?
解决方案
函数 ckeck_order_status 在完成 for 循环之前返回。
将功能更改为
def ckeck_order_status(order_id,tuple):
for o in tuple:
if o[0] == order_id:
return o[1]
return None # only return None after exhausting for loop
输出(3 个匹配项)
id order_exist ... order_id sql_status
0 19 False ... 19-9 None
1 19 False ... 19-10 None
2 19 False ... 19-11 None
3 19 False ... 19-12 None
4 19 False ... 19-13 None
5 19 True ... 19-14 test
6 19 False ... 19-15 None
7 19 True ... 19-16 delivered
8 19 True ... 19-17 waiting_shipment
推荐阅读
- android - 如何在 Android 设备上的 TWA 应用程序上隐藏“在 Chrome 中运行”吐司?
- matlab - 矩阵行块的矢量化随机播放
- python - 如何删除文本数据框中的异常值?
- php - PHP Xdebug 调试在第一个断点处停止在 VSCode 中工作
- php - 用于从发送电子邮件的网站发送电子邮件的 PHP 代码,但并非所有用户的输入都符合预期
- python - Django allauth 自动设置邮件地址为已确认
- angular - Angular 8 - 如何在输入中使用带有 2 路数据绑定的管道?
- javascript - 正则表达式:从字符串中获取最后一个括号的值
- ansible - Ansible:如何使用其他变量值构建变量名
- react-native - 如何使用 Expo CLI React-Native 构建 64 位