为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas - 遍历数据框并在列表的任何元素与另一个列表的任何元素匹配时加入

Pandas - 遍历数据框并在列表的任何元素与另一个列表的任何元素匹配时加入

梵蒂冈之花 2021-06-25 18:23:51
我有两个系列,两个系列的每个单元格都包含一个随机长度的元素列表。我的目标是在这两个系列之间执行交叉连接,但仅当系列单元格列表的至少一个元素与另一个系列中单元格列表的元素匹配时才连接行。例如:series_a0   [1geor, georg, eorge, orges, rgesq, gesqu, esq...1   [1mark, marks, arksq, rksqu, ksqua, squar, qua...2   [1prim, primr, rimro, imros, mrose, roses, ose...3   [1shan, shank, hanka, ankar, nkars, karst, wew...4   [1stka, stkat, tkath, katha, athar, thari, har...series_b0   [115br, 15bro, 5broa, broad, roadw, oadwa, adway]1   [11par, 1park, parkp, arkpl, rkpla, kplac, place]2   [125we, 25wes, 5west, west2, est25, st25t, t25th]3   [135ma, 35mad, 5madi, madis, adiso, dison]4   [135we, 35wes, 5west, west4, est41]我想检查 series_a 中的每一行,是否至少一行中的一个元素 = series_b 一行中的一个元素,如果是,将这些行连接到一个新的数据框中。因此,查看 series_a 的第一行,检查 '1geor' 是否存在于 1st、2nd、3rd。等 series_b 的列表;如果为 TRUE,则执行连接,如果为 FALSE,则不执行连接。为了澄清,返回的数据框应该有两列,其中第一列包含来自 series_a 的单元格,第二列包含来自 series_b 的单元格。对于此数据框中的所有行,第一列中的列表应该至少有一个可以在第二列的列表中找到的元素。例如:returned_df0   [115br, 15bro, 5broa]                             | [15bro, abcde, 12345, hello, world, test1]1   [11par, 1park, parkp, arkpl, rkpla]               | [parkp, broad]2   [125we, 25wes, 5west, west2, est25, st25t, t25th] | [t25th, sadlf, 234lgk]...如果 series_a 中一行中的元素出现在 series_b 中的多个行中,则匹配行的所有组合都应出现在最终数据帧中。本练习中最有效的 Python 代码是什么?编码:any(elem in b for elem in a)很容易为两个特定列表回答这个问题,但我想完整地遍历这两个系列。
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

一旦你的系列中有dtypes,我就会使用列表理解object,而pandas字符串方法和迭代方法非常慢。


elements = [(item, elem) for item in series_a.tolist()\

                         for elem in series_b.tolist()\

            if bool(set(item).intersection(elem))]


df_final = pd.DataFrame(elements)


查看完整回答
反对 回复 2021-06-29
  • 1 回答
  • 0 关注
  • 280 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号