迭代查找两个数据帧之间的交集

Finding intersection between two dataframes iteratively

我有以下两个数据框,想找到它们的交集。

df1 = pd.DataFrame({"0": [1524, 8788, 9899, 27172],
                   "1": [1333, 4476, 78783, 90832],
                   "2": [2021, 2022, 34522, 38479]})

print(df1)

      0      1      2
0   1524   1333   2021
1   8788   4476   2022
2   9899  78783  34522
3  27172  90832  38479

df2 是一个包含一列“0”的列表类型,如下所示:

          0
[1123, 2021, 1333, 6636], 
[1245, 2022, 4477, 0], 
[1524, 2023, 1, 27172], 
[2021, 2023, 90832, 38479]

预期输出应该是 df1 和 df2 的交集,例如:

df3 = [2021, 1333],
      [2022],
      [0],
      [90832, 38479]

到目前为止,我读到的内容与查找单个列表的交集有关,而不是两个具有不同数据类型的数据帧。我的最终目标是计算 precisionintersection of df1 and df2 divide by the total number of my recommendations from df1 ,即 3。 来自以下评论的补充说明: 行对齐并且将成对比较。 [0] 在 df3 中没有出现在任何地方,但在交集为 0 的情况下可以工作。

给出

df1:

       0      1      2
0   1524   1333   2021
1   8788   4476   2022
2   9899  78783  34522
3  27172  90832  38479

df2:

                            0
0    [1123, 2021, 1333, 6636]
1       [1245, 2022, 4477, 0]
2      [1524, 2023, 1, 27172]
3  [2021, 2023, 90832, 38479]

您可以在列表理解中使用 set.intersection

df1_lst = df1.to_numpy().tolist()
df2_lst = df2.to_numpy().tolist()
df3 = pd.DataFrame([[list(set(i).intersection(j[0]))] for i,j in zip(df1_lst, df2_lst)], columns=['col'])

输出:

              col
0    [1333, 2021]
1          [2022]
2              []
3  [90832, 38479]
lst=[[1123, 2021, 1333, 6636], 
[1245, 2022, 4477, 0], 
[1524, 2023, 1, 27172], 
[2021, 2023, 90832, 38479]]

s=[set(x)for x in lst]#put list in set

s1=df1.agg(set,1).to_list()#make list of list of row values

[list(x.intersection(y)) for x, y in zip(s, s1)]

出来

[[1333, 2021], [2022], [], [90832, 38479]]