如何解决高效的笛卡尔积算法Pandas DF /列之间的部分匹配 详细信息:
我有两个数据框
df1
name
xyz limited
abc private
lmn limited
pqrlimited
abc def xyz limited
abc private limited
df2
flag tag
E private
A limited
所需的输出是
输出:
name flag tag
xyz limited A limited
abc private E private
lmn limited A limited
pqrlimited A limited
abc def xyz limited A limited
abc private limited A limited
abc private limited E private
我的代码:
df1['tmp'] = 1
df2['tmp'] = 1
df3 = pd.merge(df1,df2,on=['tmp'])
df3 = df3.drop('tmp',axis=1)
df3 = df3[df3.apply(lambda x: x['tag'] in (x['name']),axis=1)]
但是实际上两个数据框都包含数百万条记录。有人可以建议最有效的方法解决这个问题吗?
解决方法
将<div>
<table id="apps"></table>
</div>
与split
一起使用:
merge
更新的解决方案:
df1['tag'] = df1['name'].str.split(' ',expand=True)[1]
df1.merge(df2)
#or
df1['flag'] = df1['tag'].map(df2.set_index('tag')['flag'])
#or if the strings not seperated then
df1['tag'] = df1['name'].str.findall('|'.join(set(df2['tag'].tolist()))).str[0]
,
您可以这样做:
regx = '|'.join(df2['tag'])
df1['tag'] = df1['name'].str.extract(f'({regx})')
df1['flag'] = df1['tag'].map(df2.set_index('tag')['flag'])
print(df1)
输出:
name tag flag
0 xyz limited limited A
1 abc private private E
2 lmn limited limited A
3 pqrlimited limited A
4 abc def xyz limited limited A
5 abc private limited private E
详细信息:
- 使用在df2中找到的标签列表创建正则表达式
- 从df1名称栏中提取这些标签
- 将这些标签映射到df2中的标志值
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。