Python 查找数据帧行中的相似性
我正在努力想办法有效地解决熊猫的数据纠纷问题。这是我的熊猫数据框:Python 查找数据帧行中的相似性,python,pandas,Python,Pandas,我正在努力想办法有效地解决熊猫的数据纠纷问题。这是我的熊猫数据框: brian steve joe tom 0 1 0 1 0 1 1 0 0 0 2 0 1 1 0 3 1 0 1 1 我主要是想找出在同一行中谁的值为1,然后计算它们都有1的行数。例如,brian和joe两次在同一行(第0行和第3行),所以他们的总分是2。我想到这个方法的第一个方法是创建字典。我想我应该做一些类似于{brian:0,1,3}的事情,然后
brian steve joe tom
0 1 0 1 0
1 1 0 0 0
2 0 1 1 0
3 1 0 1 1
我主要是想找出在同一行中谁的值为1,然后计算它们都有1的行数。例如,brian和joe两次在同一行(第0行和第3行),所以他们的总分是2。我想到这个方法的第一个方法是创建字典。我想我应该做一些类似于{brian:0,1,3}的事情,然后比较/计算相似性。无法让它工作,因为我有多级索引的问题
然后我考虑了重塑/融合数据帧以解决问题的可能性
我在想一个类似这样的df(显示第1行的片段):
我这样想对吗?我尝试使用了很多不同的pd.melt变体,但都没有得到我想要的。有什么简单的东西我遗漏了吗?试图将数据帧重塑为我想要解决的问题,这会引起很多挫折,因此,如果能得到任何帮助,我们将不胜感激。矩阵乘法应该可以,不是吗?还是比这更复杂
In [37]: df
Out[37]:
brian steve joe tom
0 1 0 1 0
1 1 0 0 0
2 0 1 1 0
3 1 0 1 1
In [38]: df.T.dot(df)
Out[38]:
brian steve joe tom
brian 3 0 2 1
steve 0 1 1 0
joe 2 1 3 1
tom 1 0 1 1
编辑:
谢谢@exp1orer
In [40]: df2 = df.T.dot(df)
In [41]: df3 = df2.stack().reset_index()
In [42]: df3[df3.level_0 != df3.level_1]
Out[42]:
level_0 level_1 0
1 brian steve 0
2 brian joe 2
3 brian tom 1
4 steve brian 0
6 steve joe 1
7 steve tom 0
8 joe brian 2
9 joe steve 1
11 joe tom 1
12 tom brian 1
13 tom steve 0
14 tom joe 1
矩阵乘法应该可以,不是吗?还是比这更复杂
In [37]: df
Out[37]:
brian steve joe tom
0 1 0 1 0
1 1 0 0 0
2 0 1 1 0
3 1 0 1 1
In [38]: df.T.dot(df)
Out[38]:
brian steve joe tom
brian 3 0 2 1
steve 0 1 1 0
joe 2 1 3 1
tom 1 0 1 1
编辑:
谢谢@exp1orer
In [40]: df2 = df.T.dot(df)
In [41]: df3 = df2.stack().reset_index()
In [42]: df3[df3.level_0 != df3.level_1]
Out[42]:
level_0 level_1 0
1 brian steve 0
2 brian joe 2
3 brian tom 1
4 steve brian 0
6 steve joe 1
7 steve tom 0
8 joe brian 2
9 joe steve 1
11 joe tom 1
12 tom brian 1
13 tom steve 0
14 tom joe 1
美好的为了匹配OP所需的输出,您可以对名称进行
堆栈
,重置索引
,然后删除两个名称相同的行。这真的很有帮助,我想得太多了,看起来很像!为了匹配OP所需的输出,您可以对名称进行堆栈
,重置索引
,然后删除两个名称相同的行。这真的很有帮助,我想得太多了