Мы начинаем с df следующим образом:
Код: Выделить всё
import numpy as np
import pandas as pd
np.random.seed(1)
df = pd.DataFrame({
'id': np.arange(10),
'a': np.random.randint(1, 10, 10),
'b': np.random.randint(1, 10, 10),
'c': np.random.randint(1, 10, 10)
})
df
Out[23]:
id a b c
0 0 2 8 2
1 1 8 8 9
2 2 7 2 9
3 3 3 8 4
4 4 5 1 9
5 5 6 7 8
6 6 3 8 4
7 7 5 7 7
8 8 3 2 6
9 9 5 1 2
Код: Выделить всё
new_df = df.groupby('a').agg('max').reset_index()
Out[25]:
a id b c
0 2 0 8 2
1 3 8 8 6
2 5 9 7 9
3 6 5 7 8
4 7 2 2 9
5 8 1 8 9
Например,
Код: Выделить всё
id 0 belongs to a = 2,
1 to 8,
2 to 7,
(3, 6, 8) belongs to 3
etc..
Код: Выделить всё
new_df.groupby('b').agg('max').reset_index()
Out[28]:
b a id c
0 2 7 2 9
1 7 6 9 9
2 8 8 8 9
Где
Код: Выделить всё
group a (2, 3, 8) belongs to group 8 (of b)
(5, 6) = 7
7 = 2
Код: Выделить всё
0 => a = 2 => b = 8 (where b = 8 is the final group that interests me)
1 => a = 8 => b = 8
2 => a = 7 => b = 2
Теперь я делаю это, чтобы уменьшить количество сущностей в моих данных и сгруппировать их в то же самое ведро каким-то образом. И мне нужно сопоставить их исходный идентификатор с новым идентификатором, который отображается после многих итераций groupby.
В конце я хочу увидеть что-то вроде этого
Код: Выделить всё
Out[32]:
id grp
0 0 8
1 1 8
2 2 2
3 3 8
4 4 7
5 5 7
6 6 8
7 7 7
8 8 8
9 9 7
Любое решение или предложение будет рассмотрено наиболее желанный. Даже перенос значений в специальном для этого столбце с каждой группировкой.
И когда мы агрегируем, мы можем выполнить сложение множества...
Подробнее здесь: https://stackoverflow.com/questions/785 ... operations