Сохраняйте/создавайте карту при выполнении нескольких операций группировки панд.Python

Программы на Python
Anonymous
Сохраняйте/создавайте карту при выполнении нескольких операций группировки панд.

Сообщение Anonymous »

Представьте себе процесс, в котором мы группируем несколько панд.
Мы начинаем с 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
Мы выполняем группировку по «a» (агрегат «max» — это всего лишь пример)

Код: Выделить всё

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
опять же, потому что id=0 перешел в a=2, а a=2 перешел в b=8..
Любое решение или предложение будет рассмотрено наиболее желанный. Даже перенос значений в специальном для этого столбце с каждой группировкой.
И когда мы агрегируем, мы можем выполнить сложение множества...

Подробнее здесь: https://stackoverflow.com/questions/785 ... operations

Вернуться в «Python»