Есть ли операция "ungroup by" напротив группы .groupby в pandas?

Предположим, что мы берем панду с данными...

    name  age  family
0   john    1       1
1  jason   36       1
2   jane   32       1
3   jack   26       2
4  james   30       2

Тогда сделай groupby()...

group_df = df.groupby('family')
group_df = group_df.aggregate({'name': name_join, 'age': pd.np.mean})

Затем выполните некоторую операцию агрегирования/суммирования (в моем примере моя функция name_join объединяет имена):

def name_join(list_names, concat='-'):
    return concat.join(list_names)

Таким образом, сгруппированные итоговые результаты:

        age             name
family                      
1        23  john-jason-jane
2        28       jack-james

Вопрос:

Существует ли быстрый и эффективный способ получить следующую информацию из агрегированной таблицы?

    name  age  family
0   john   23       1
1  jason   23       1
2   jane   23       1
3   jack   28       2
4  james   28       2

(Примечание: значения в столбце age являются лишь примерами, мне все равно, какую информацию я теряю после усреднения в этом конкретном примере)

То, как я думал, что смогу это сделать, выглядит не слишком эффективно:

  1. создать пустой фрейм данных
  2. от каждой строки в group_df имена
  3. вернуть фрейм данных с таким количеством строк, сколько есть имен в начальной строке
  4. добавить вывод в пустой фрейм данных

Ответ 1

.reset_index() эквивалентом является .reset_index(), но не стоит думать о нем как об "противоположности" groupby().

Вы разбиваете строку на части и поддерживаете связь каждой части с "семьей". Этот мой старый ответ делает всю работу.

Просто установите сначала "family" в качестве столбца индекса, reset_index() по ссылке выше, а затем в конце reset_index() чтобы получить желаемый результат.