簡體   English   中英

迭代地查找兩個數據幀之間的交集

[英]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]

預期的 output 應該是 df1 和 df2 的交集,例如:

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

到目前為止,我所閱讀的內容與查找單個列表的交集有關,而不是與具有不同數據類型的兩個數據幀有關。 我的最終目標是計算精度,即intersection of df1 and df2 divide by the total number of my recommendations from df1 ,即 3。來自以下評論的附加說明:行對齊並且將成對比較。 df3 中的[0]不會出現在任何地方,但可以在交集為 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'])

Output:

              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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM