我有一个如下所示的数据框:
Symbols Count
A 3
A 1
A 2
A 4
B 1
B 3
B 9
C 2
C 1
C 3
我想要使用 Pandas 来识别“计数”列上的重复行,但我想计算重复项上符号彼此相交的次数。
我的意思是,如果计数值使用两个不同的符号出现两次。这些符号被列为它们之间有一个交集,因为它们共享相同的计数值。
类似这样的事情:
Symbol Symbol Number of Intersections
A B 2
B A 2
C A 3
.....
我确信有一种 Pythonic Pandas 的方式可以做到这一点。但它并没有浮现在脑海中。
最佳答案
让我们使用merge
进行自合并,然后使用query
和groupby
:
df_selfmerge = df.merge(df, on='Count', how="inner").query('Symbols_x != Symbols_y')
(df_selfmerge.groupby(['Symbols_x','Symbols_y'])['Count']
.count()
.reset_index()
.rename(columns={'Symbols_x':'Symbol',
'Symbols_y':'Symbol',
'Count':'Number of Intersections'}))
编辑:在 NaN 值的情况下使用 size() 更安全
(df_selfmerge.groupby(['Symbols_x','Symbols_y'])['Count']
.size()
.reset_index()
.rename(columns={'Symbols_x':'Symbol',
'Symbols_y':'Symbol',
0:'Number of Intersections'}))
输出:
Symbol Symbol Number of Intersections
0 A B 2
1 A C 3
2 B A 2
3 B C 2
4 C A 3
5 C B 2
关于python - 使用 Pandas 计算重复项之间的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43660452/