吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1215|回复: 16
收起左侧

[求助] python pandas apply的问题

[复制链接]
cqwcns 发表于 2020-12-24 12:06


现在有一个DataFrame(pandas),我叫它df1,内容大概是这样的:
“工单当前责任人”列中有夹杂这人员姓名。
微信图片_20201224115231.png

另外有一个DataFrame(pandas),我叫它df2,内容大概是这样的:
微信图片_20201224115659.png

我希望在df1中加一列 “人员” ,通过apply,规则是如果“工单当前责任人”包含了df2的"姓名",则就等于对应姓名,效果类似这样:
微信图片_20201224120219.png

我想到的是apply时,for循环df2的姓名,如果包含,就=姓名,否则等于=“未知”。
问题在于df2的姓名有几百到成千行,这样遍历效率好像太低了。各位大佬有什么建议?

免费评分

参与人数 1热心值 +1 收起 理由
SHOESHINEBOY + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

peixuezhi 发表于 2020-12-24 12:21
谢谢分下给你看看如何
青山绿水meng 发表于 2020-12-24 12:43
 楼主| cqwcns 发表于 2020-12-24 12:55
我的代码:
[Python] 纯文本查看 复制代码
# 获得工单人员
def func_get_personnel(x):
    for str_name in df_personnel['姓名']:
        if str_name in x.工单当前责任人:
            return str_name
    return '未知'

# 新增[装维人员]列,并根据func_get_grid函数规则获得网格
df_on_the_way['装维人员'] = df_on_the_way.apply(lambda x: func_get_personnel(x), axis=1)
 楼主| cqwcns 发表于 2020-12-24 12:59
cqwcns 发表于 2020-12-24 12:55
我的代码:
[mw_shl_code=python,true]# 获得工单人员
def func_get_personnel(x):

这样果然很慢
ly:幽灵 发表于 2020-12-24 13:29
-切割,取-1下标,你的工单负责人名字通常都是最后的,减少判断范围可以提高效率,就取最后的下标跟姓名匹配就行了,还是觉得慢就多线程吧
music984 发表于 2020-12-24 13:44
其实就相当于提取姓名数据,等大神指导方法
metalhjl 发表于 2020-12-24 14:33
先提取工单负责人中的姓名,让后两个df直接merge
 楼主| cqwcns 发表于 2020-12-24 15:24
metalhjl 发表于 2020-12-24 14:33
先提取工单负责人中的姓名,让后两个df直接merge

关键是如何提取比较好?
stoner 发表于 2020-12-24 15:55
本帖最后由 stoner 于 2020-12-24 15:56 编辑

几百上千这种工作量,不必执着效率吧,可以考虑使用 Series.str.extract 方法

pat = "(" + "|".join(set(df2['姓名'])) + ")"
df1['工单当前责任人'].str.extract(pat)


MouseInc 155426.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表