如何在同一位置的值上使用函数组合2个数据帧

2024-10-04 09:28:04 发布

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

我尝试将2个数据帧与将函数应用于2个数据帧相同位置的值相结合。你知道吗

两个数据帧中的每个元素都是列表类型,表示为项[col,row]的向量。你知道吗

df1 :

   A      B   
0  vec1   vec2      
1  vec1   vec2      
2  vec1   vec2   

df2 :

   A      B         
0  vec5   vec5     
1  vec6   vec6    
2  vec7   vec7  

function : gensim.matutils.cossim(vec1,vec2)

Expected new_df :
   A                   B
0  cossim(vec1,vec5)   cossim(vec2,vec5)   
1  cossim(vec1,vec6)   cossim(vec2,vec6)   
2  cossim(vec1,vec7)   cossim(vec2,vec7)

我实现了以下代码:

for column in df1():
    new_df[column] = df1[column].apply(matutils.cossim(df1[x],df2.loc[0,column]))

我得到的错误是:

AttributeError: 'list' object has no attribute 'sqrt'


Tags: 数据函数元素dfnewcolumndf1df2
1条回答
网友
1楼 · 发布于 2024-10-04 09:28:04

您可以定义自己的function并应用它,然后通过numpy.vectorize更改它。你知道吗

import numpy as np
import pandas as pd

from sklearn.metrics.pairwise import cosine_similarity


X = pd.DataFrame([[[0.1,0.1], [0.2,0.2]], [[0.3,0.3], [0.4,0.4]]])
Y = pd.DataFrame([[[0.1,0.1], [0.2,0.2]], [[0.3,0.3], [0.4,0.4]]])

def func(vecx, vecy):
    return cosine_similarity(vecx, vecy)

F = np.vectorize(func)         

print(pd.DataFrame(F(X, Y)))

你会得到

     0    1
0  1.0  1.0
1  1.0  1.0

相关问题 更多 >