Matrix pandas-针对所有其他行将函数应用于当前行
我正在利用pandas创建一个数据帧,如下所示:Matrix pandas-针对所有其他行将函数应用于当前行,matrix,pandas,Matrix,Pandas,我正在利用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']) 我想从这个输入计算另一个矩阵,将每一行与所
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'])
我想从这个输入计算另一个矩阵,将每一行与所有其他行进行比较。让我们假设,例如,计算是一个查找交集长度的函数,我想要一个输出数据帧,第一行中有len(交集(Alice,Bob))
,len(交集(Alice,Carol))
,len(交集(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))
熊猫中有这种基于函数的计算的命名方法吗?实现这一点最有效的方法是什么?我不知道命名方法,但我有一个单行程序
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
@丹·艾伦的解决方案是“正确的”,这里有一个稍微不同的解决问题的方法
In [26]: ratings
Out[26]:
article_a article_b article_c article_d article_e
Alice 1 1 1 0 0
Bob 1 0 0 0 0
Carol 0 0 0 0 0
Dave 0 0 0 1 1
In [27]: ratings.apply(lambda x: (ratings.T.sub(x,'index')).sum(),1)
Out[27]:
Alice Bob Carol Dave
Alice 0 -2 -3 -1
Bob 2 0 -1 1
Carol 3 1 0 2
Dave 1 -1 -2 0
有趣。我用一个稍微好一点的嵌套应用程序替换了我的列表理解。但这更紧凑。我想知道是否能把
np.equal
加入其中……很好的答案!我一直在到处找这个。