我是python的初学者,我有两个 Dataframe ,如下所示。第一个 Dataframe 代表用户的向量和组号。
df1 = pd.DataFrame({'user': ['user 1', 'user 2', 'user 3', 'user 4', 'user 5'], 'x1': [[0.2, 0.3, 0.5],[0.3, 0.3, 0.4],[0.4, 0.4, 0.2],[0.2, 0.1, 0.7],[0.5,0.3,0.2]],'group': [1, 0, 0, 2, 1]})
df1
输出:
user x1 group
0 user 1 [0.2, 0.3, 0.5] 1
1 user 2 [0.3, 0.3, 0.4] 0
2 user 3 [0.4, 0.4, 0.2] 0
3 user 4 [0.2, 0.1, 0.7] 2
4 user 5 [0.5, 0.3, 0.2] 1
第二 Dataframe 表示具有其向量和变量(p2)及其阈值的组号
df2 = pd.DataFrame({'group': [0, 1, 2],
'x2': [[0.4, 0.2, 0.4],[0.5, 0.1, 0.4], [0.5, 0.1, 0.4]],
'p2': [0.231, 0.342, 0.411],
'threshold': [0.9, 0.6, 0.8]})
df2
输出:
group x2 p2 threshold
0 0 [0.4, 0.2, 0.4] 0.231 0.9
1 1 [0.5, 0.1, 0.4] 0.342 0.6
2 2 [0.5, 0.1, 0.4] 0.411 0.8
我尝试使用以下公式计算每个用户相对于分配给它的组的得分(S):
其中k =组大小,T是(x2-x1)的传输矩阵。
我如何为所有用户做到这一点?
2条答案
按热度按时间zazmityj1#
首先,将每个组的成员数加起来,得到 * k * 项:
然后合并
df1
和df2
,这样我们就有了一个帧,其中每行包含每个用户的所有必要参数:现在定义计算S分数的函数:
最后,将这些函数应用于联接矩阵中的每一行:
结果:
ruarlubt2#
答案与@The Photon类似,其中我们(1)合并df 1和df 2,(2)用groupby计算
k
(3)计算(x2-x1)与自身的内积最终合并表