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