Python 3.x 将python中一列元组的相等元组提取到新数据集

Python 3.x 将python中一列元组的相等元组提取到新数据集,python-3.x,pandas,tuples,Python 3.x,Pandas,Tuples,我有一个数据框,它以id上的userid访问列表开始,具有userid的元组,这些元组对于给定的id重复。它还具有此元组重复的次数,如下所示: id id2 duplicates 0 a b [((us1, us2), 5), ((us2, us1), 3), ((us2, us4), 2)] 9 c b [((us1, us2), 5), ((us2, us1), 3), ((us2, us4), 2)] 在第一行,我们看到tuple(us1,us2)出现了

我有一个数据框,它以
id
上的
userid
访问列表开始,具有
userid的
元组,这些元组对于给定的
id
重复。它还具有此元组重复的次数,如下所示:

    id  id2 duplicates
0   a   b   [((us1, us2), 5), ((us2, us1), 3), ((us2, us4), 2)]
9   c   b   [((us1, us2), 5), ((us2, us1), 3), ((us2, us4), 2)]
在第一行,我们看到tuple(us1,us2)出现了5次

生成此代码的代码如下所示:

d = {'id': ["a", "a", "a", "a", "a", "a", "a", "a", "a", "c", "c", "c", "c", "c"], 
     'id2': ["b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "b"], 
     'userid': ["us1", "us2", "us1", "us2", "us4", "us4", "us5", "us1", "us2", "us1", "us2", "us1", "us2", "us4"],
     "time": [1, 2, 3, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14]}

    df_test = pd.DataFrame(data=d).sort_values('time')
    df_test.groupby(['id','id2']).agg(lambda x: x.tolist()).reset_index()
    df_test['tuples']=  df_test.apply(lambda x: list(zip(df_test.userid[:-1].sort_index(), df_test.userid[1:].sort_index())), 1)
    df_test = df_test.drop_duplicates(['id'],keep='first').drop(['userid', 'time'], 1)
    df_test['duplicates'] = df_test.apply(lambda x: [(k,v) for k,v in Counter(x.tuples).items() if v>1], 1)
    df_test.drop('tuples',1)
我现在需要的是找到在不同行中重复的元组(在重复的列上),这些元组具有相同的
id2
,但不同的
id
,因此这里的结果应该是一个新的数据帧:

id     id2  duplicates
[a, c]  b   [(us1, us2), (us2, us1), (us2, us4)]

使用
explode

df_test = pd.DataFrame(data=d).sort_values('time')
df_test.groupby(['id', 'id2']).agg(lambda x: x.tolist()).reset_index()
df_test['tuples'] = df_test.apply(
     lambda x: list(zip(df_test.userid[:-1].sort_index(), df_test.userid[1:].sort_index())), 1)
s=df_test.explode('tuples').groupby(['tuples','id2']).id.apply(pd.Series.unique).apply(tuple).reset_index()
s.groupby(['id','id2']).tuples.agg(list)
id      id2
(a, c)  b      [(us1, us2), (us2, us1), (us2, us4), (us4, us4...
Name: tuples, dtype: object