熊猫-遍历数据框并在列表的任何元素与另一个列表的任何元素匹配时进行联接

时间:2018-09-26 15:51:51

标签: python python-3.x pandas list element

我有两个系列,两个系列的每个单元格都包含一个随机长度的元素列表。我的目标是在这两个系列之间执行交叉联接,但是只有在一个系列的单元格列表中的至少一个元素与另一个系列中的单元格列表中的元素匹配时,才联接行。

例如:

series_a

0   [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_b

0   [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的第一行,检查在第1,第2,第3中是否存在“ 1geor”。等等series_b的列表;如果为TRUE,则执行联接;如果为FALSE,则不执行联接。

为澄清起见,返回的数据帧应具有两列,其中第一列包含来自series_a的单元格,第二列包含来自series_b的单元格。对于此数据帧中的所有行,第一列中的列表应至少包含一个元素,该元素可以在第二列的列表中找到。例如:

returned_df

0   [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 个答案:

答案 0 :(得分:1)

一旦您的系列中有INSERT INTO #transformed (NewValue) SELECT * FROM ( SELECT func_doTransformation(ot.OldValue) as NewValue FROM OriginalTable ot ) x WHERE x.NewValue <> 'bad data' 个dtype,并且object字符串方法和迭代方法都很慢,我就会使用 list comprehension

pandas