根据另一列pandas计算元素重叠

时间:2019-07-11 14:07:44

标签: pandas dataframe pandas-groupby

如果我有以下形式的数据框:

 tag      element_id
  1          12
  1          13
  1          15
  2          12
  2          13
  2          19
  3          12
  3          15
  3          22

如何根据tags计算element_id的重叠量?我猜结果应该是以下形式的重叠矩阵:

   1   2   3
1  X   2   2
2  2   X   1
3  2   1   X

我将X放在对角线上,因为标签与其自身的重叠无关紧要,并且矩阵中的数字代表两个标签共享的总element_ids

我的尝试:

您可以尝试使用for循环,例如:

for item in df.itertuples():
    element_lst += [item.element_id]
    element_tag = item.tag
# then intersect the element_list row by row. 
# This is extremely costly for large datasets

我正在考虑的第二件事是使用df.groupby('tag')并尝试以某种方式与element_id相交,但是我不清楚如何使用分组数据来做到这一点。

1 个答案:

答案 0 :(得分:3)

merge + crosstab

# Find element overlap, remove same tag matches
res = df.merge(df, on='element_id').query('tag_x != tag_y')

pd.crosstab(res.tag_x, res.tag_y)

输出:

tag_y  1  2  3
tag_x         
1      0  2  2
2      2  0  1
3      2  1  0