У меня есть следующий формат данных иерархических данных. Может быть несколько строк одного уровня и переменной глубины. Я пытаюсь получить результат, в котором в col_2 мы видим агрегированную сумму всех нижних уровней экземпляра.
Использование простого группового режима не работает, поскольку оно не понимает иерархическую структуру. Я попытался разбить col_1 на несколько столбцов с уровнями от 1 до 6 (глубина), и, следовательно, сгруппировать уровни от 1 до 6, но результаты по-прежнему неверны, несмотря на то, что фрейм данных является многоиндексным.
код перед разделением: df.groupby(["col_1"], as_index=False).sum()
код после разделения: df.groupby(["level-1","level-2","level-3","level-4","level-5","level-6"], as_index=False).sum()
Буду признателен за любую помощь!
ОБНОВЛЕНИЕ благодаря @Yo_Chris:
import pandas as pd
# sample data
df = pd.DataFrame({'Col1': ['PUU', 'PUU;UT', 'PUU;UT', 'PUU;UT;AHU', 'PUU;UT;AHU;CSP', 'PUU;AS', 'PUU;PREV', 'PUU;TECHNOLOGY', 'PUU;TECHNOLOGY', 'PUU;TECHNOLOGY;SPEC'],
'Col2': [1000,1000,50,500,250,100,1000,300,500,900]})
# groupby, sum and invert
s = df.groupby('Col1')['Col2'].sum()[::-1]
# groupby, cumsum and invert
s.groupby(s.index.str[0]).cumsum()[::-1])```
# this results in the following:
Col1
PUU 5600
PUU;AS 4600
PUU;PREV 4500
PUU;TECHNOLOGY 3500
PUU;TECHNOLOGY;SPEC 2700
PUU;UT 1800
PUU;UT;AHU 750
PUU;UT;AHU;CSP 250
Name: Col2, dtype: int64
В то время как мы хотим:
PUU 5600
PUU;AS 100
PUU;PREV 1000
PUU;TECHNOLOGY 1700
PUU;TECHNOLOGY;SPEC 900
PUU;UT 1800
PUU;UT;AHU 750
PUU;UT;AHU;CSP 250