Pandas遍历dataframe并在列表中的任何元素与另一个lis的任何元素匹配时进行连接

2024-10-01 22:34:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如:

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]

我想检查一下,对于序列“a”中的每一行,是否至少有一个元素=序列“b”中的一行元素,如果是,请将这些行连接到一个新的数据帧中。在

因此,查看序列a的第一行,检查序列_b的第一、第二、第三等列表中是否存在“1geor”;如果为TRUE,则执行联接,如果为FALSE,则不执行联接。在

为了澄清,返回的dataframe应该有两列,其中第一列包含来自序列_a的单元格,第二列包含来自序列\u b的单元格。对于此数据帧中的所有行,第一列中的列表至少应有一个可以在第二列的列表中找到的元素。例如:

^{pr2}$

如果序列_a中一行中的某个元素出现在序列\u b中的多个行中,则匹配行的所有组合都应出现在最终的数据帧中。在

对于这个练习,什么是最有效的Python代码?代码:

^{3}$

对于两个特定的列表,很容易回答这个问题,但是我希望遍历这两个系列的全部内容。在

谢谢你!在


Tags: 数据代码元素目标列表序列交叉series
1条回答
网友
1楼 · 发布于 2024-10-01 22:34:45

一旦您的系列中有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)

相关问题 更多 >

    热门问题