在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模块创建所有类别的排列。我有一些主意,但看起来都很丑陋且效果不佳。
感谢您的帮助,如果不清楚,请告诉我,我将添加详细信息。
谢谢社区!
答案 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