使用Pandas计算重复项之间的交叉点

时间:2017-04-27 14:18:41

标签: python pandas

我有一个如下所示的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这样做的方式。但它不会浮现在脑海中。

1 个答案:

答案 0 :(得分:2)

让我们使用merge进行自我合并,然后使用querygroupby

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