Предположим, у нас есть фрейм данных df
с дублированными строками. Я хочу сохранить идентификаторы уникальных строк, чтобы у каждого был связанный список целых чисел (идентификаторов, в которых они появляются в кадре данных).
Позвольте мне показать пример:
import numpy as np
import pandas as pd
np.random.seed(0)
m = ['a','b']
M = ['X','Y']
n = np.arange(3)
size = 10
df = pd.DataFrame({'m': np.random.choice(m, size=size, replace=True),
'M': np.random.choice(M, size=size, replace=True),
'n': np.random.choice(n, size=size, replace=True)})
Создает следующий фрейм данных:
m M n
0 a Y 2
1 b X 2
2 b X 0
3 a Y 1
4 b X 1
5 b X 1
6 b X 1
7 b X 0
8 b X 1
9 b Y 0
Мне кажется, я хочу сделать что-то вроде df.groupby(df.columns.tolist()).size()
, но вместо того, чтобы получать количество появлений, я хочу получить позиции там, где они появляются. Таким образом, в этом случае желаемый результат будет (например, в форме словаря):
output = {('a','Y',1):[3],
('a','Y',2):[0],
('b','X',0):[2,7],
('b','X',1):[4,5,6,8],
('b','X',2):[1],
('b','Y',0):[9]
}
Как я могу это сделать? Идея состоит в том, чтобы сделать это как можно более эффективным, поскольку в фрейме данных может быть несколько столбцов и несколько тысяч (или даже несколько миллионов) строк.