i have group object converted in dataframe : item id's 1 100,101,102 2 101,103,104 3 100,201,202 now want generate 2-tuples/ordered pairs, gives me count of ids shared in each pair of items. desired output is: item item id's 1 2 5 1 3 5 2 3 6 the columns correspond every ordered pair of items such (1,2),(1,3),(2,3) , on , third column tells me how many ids both items have in original table. if structure have like: data = { 1: [100, 101, 102], 2: [101, 103, 104], 3: [100, 201, 202], } then help: res = {} items = data.keys() n, in enumerate(items, start=1): j in items[n:]: res[(i, j)] = len( set(data[i]).union(set(data[j])) ) output: res {(1, 2): 5, (1, 3): 5, (2, 3): 6}