我有一个如下所示的Dataframe:
Symbols Count
A 3
A 1
A 2
A 4
B 1
B 3
B 9
C 2
C 1
C 3
我想用Pandas做的是识别" Count"列,但我想计算符号在副本上相互交叉的次数。
我的意思是,如果一个Count值出现两次,有两个不同的符号。符号被列为在它们之间有一个交集,因为它们共享相同的Count值。
这样的事情:
Symbol Symbol Number of Intersections
A B 2
B A 2
C A 3
.....
我确定有一种Pythonic Pandas这样做的方式。但它不会浮现在脑海中。
答案 0 :(得分:2)
让我们使用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'}))
编辑:使用size()更安全,只需加入NaN值
(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