Как сгруппировать по иерархическим данным в pandas / sql? - PullRequest
1 голос
/ 02 мая 2019

У меня проблема с иерархией. У меня есть такие данные.

   id       performance_rating     parent_id     level
   111           8                   null         0 
   122           3                   null         0
   123           9                   null         0
   254           5                   111          1
   265           8                   111          1
   298           7                   122          1
   220           6                   123          1
   305           5                   298          2
   395           8                   220          2
   ...           ...                 ...         ...
   654           4                   562          5

идентификатор - это уникальная личность человека.performance_rating - это его рейтинг из 10 parent_id - это идентификатор человека, который работает над соответствующим идентификатором.

Мне нужно узнать среднюю оценку отдельного дерева (111,122,123).

То, что я пробовал, это отдельный фрейм данных в соответствии с уровнями.Затем объедините его и сгруппируйте.Но это довольно долго.

1 Ответ

1 голос
/ 02 мая 2019

будет несколько разных способов сделать это - вот уродливое решение.

Мы используем цикл while и for для функции "back-level" каждого столбца кадра данных: для этого требуется, чтобысначала мы устанавливаем id в качестве индекса и сортируем по уровню по убыванию.Это также не требует дублирования идентификаторов.Вот так:

df = df.set_index('id')
df = df.sort_values(by='level', ascending=False)

for i in df.index:
    while df.loc[i, 'level'] > 1:
        old_pid = df.loc[i, 'parent_id']
        df.loc[i, 'parent_id'] = df.loc[old_pid, 'parent_id']
        old_level = df.loc[i,'level']
        df.loc[i, 'level'] = old_level - 1

Таким образом, независимо от того, сколько существует уровней, мы остаемся со всем на уровне 1 иерархии и можем затем сделать:

grouped = df.groupby('parent_id').mean()

(или любой другойвариация того что нужно) надеюсь это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...