Сначала создайте кортежи столбца A
для первого уровня MultiIndex
:
s = df.groupby(level=0)['A'].apply(tuple)
print (s)
Order
a ('aaa', 'bb')
b ('aaa', 'bb', 'c')
c ('aaa', 'bb', 'c')
Name: A, dtype: object
, а затем верните индексы всех дублированных значений на boolean indexing
с Series.duplicated
:
out = s.index[s.duplicated(keep=False)]
print (out)
Index(['b', 'c'], dtype='object', name='Order')
РЕДАКТИРОВАТЬ:
df = pd.DataFrame(data=[[1, 1, 10, 20], [1, 2, 30, 40],
[1, 3, 50, 60], [2, 1, 10, 20],
[2, 2, 30, 40], [2, 3, 50, 60],
[3, 1, 10, 20], [3, 2, 30, 40],
[4, 1, 10, 20], [4, 2, 30, 40]], columns=['id', 'date', 'd1', 'd2'])
print (df)
s = df.groupby('id')['d1','d2'].agg(tuple)
print (s)
d1 d2
id
1 (10, 30, 50) (20, 40, 60)
2 (10, 30, 50) (20, 40, 60)
3 (10, 30) (20, 40)
4 (10, 30) (20, 40)
out = s.reset_index().groupby(s.columns.tolist(), sort=False)['id'].apply(tuple).tolist()
print (out)
[(1, 2), (3, 4)]