我正在利用pandas创建一个如下所示的数据框:
ratings = pandas.DataFrame({
'article_a':[1,1,0,0],
'article_b':[1,0,0,0],
'article_c':[1,0,0,0],
'article_d':[0,0,0,1],
'article_e':[0,0,0,1]
},index=['Alice','Bob','Carol','Dave'])
Run Code Online (Sandbox Code Playgroud)
我想从这个输入计算另一个矩阵,它将每行与所有其他行进行比较.让我们假设,例如计算是要找到交集的长度的功能,我想与输出数据框len(intersection(Alice,Bob)),len(intersection(Alice,Carol)),len(intersection(Alice,Dave))第一行,每行之后对别人该格式英寸 使用此示例输入,输出矩阵将是4x3:
len(intersection(Alice,Bob)),len(intersection(Alice,Carol)),len(intersection(Alice,Dave))
len(intersection(Bob,Alice)),len(intersection(Bob,Carol)),len(intersection(Bob,Dave))
len(intersection(Carol,Alice)),len(intersection(Carol,Bob)),len(intersection(Carol,Dave))
len(intersection(Dave,Alice)),len(intersection(Dave,Bob)),len(intersection(Dave,Carol))
Run Code Online (Sandbox Code Playgroud)
在pandas中有这种基于函数的计算的命名方法吗?实现这一目标的最有效方法是什么?
我不知道一个命名的方法,但我有一个单行.
In [21]: ratings.apply(lambda row: ratings.apply(
... lambda x: np.equal(row, x), 1).sum(1), 1)
Out[21]:
Alice Bob Carol Dave
Alice 5 3 2 0
Bob 3 5 4 2
Carol 2 4 5 3
Dave 0 2 3 5
Run Code Online (Sandbox Code Playgroud)