计算给定列的排列出现次数

时间:2018-12-12 17:36:29

标签: python pandas permutation

在Pyhon中,我尝试编写一些代码来计算数据集中给定排列的实例。让我更加清楚。给定以下数据框

   WEB_ID          Category
   12332405        a
   3763583         b
   7930245         c
   7930245         a

我想要一个看起来像这样的数据框。

s    t    q
a    b    0
a    c    1
b    a    0
b    c    0
c    a    1
c    b    0

这是可读的,有0个ID分别具有类别a和b,具有1的a和c,具有0的b和a ...等等。

我要使用Itertools模块创建所有类别的排列。我有一些主意,但看起来都很丑陋且效果不佳。

感谢您的帮助,如果不清楚,请告诉我,我将添加详细信息。

谢谢社区!

1 个答案:

答案 0 :(得分:0)

ways to make the cartesian product more efficient上有帖子,但基本思路是:

    merge
  • 'WEB_ID'获得'Category'的所有组合。 (这本质上使您想要获得的AB-BA匹配具有互惠性)
  • groupby + size进行计数。
  • .reindex获取零。
  • 删除与自己合并的事物。

代码:

import pandas as pd

res = (df.merge(df, on='WEB_ID')
         .groupby(['Category_x', 'Category_y']).size()
         .reindex(pd.MultiIndex.from_product([df.Category.unique()]*2, 
                                              names=['s', 't']))).fillna(0)

res = res[res.index.get_level_values(0) != res.index.get_level_values(1)]
res = res.to_frame('q')

输出:res

       q
s t     
a b  0.0
  c  1.0
b a  0.0
  c  0.0
c a  1.0
  b  0.0