У меня возникла следующая проблема. У меня есть dataframe с множественным индексом (три здесь):Pandas div с несколькими индексами
df = pd.DataFrame(np.random.randint(2, 8, size = (8, 1)))
df.index = pd.MultiIndex.from_tuples([(1990, 'Women','type_A'), (1990, 'Women','type_B'),(1990, 'Men','type_A'), (1990, 'Men','type_B'),
(1991, 'Women','type_A'), (1991, 'Women','type_B'),(1991, 'Men','type_A'), (1991, 'Men','type_B')])
df.index.names = ['Year', 'Gender','Type']
df.columns = ['Total']
, который выглядит как:
Total
Year Gender Type
1990 Women type_A 5
type_B 7
Men type_A 6
type_B 2
1991 Women type_A 2
type_B 6
Men type_A 3
type_B 5
Я пытался вычислить долю каждого Type
и Gender
по Year
, но я не нашел любой четкий ответ на SOF. В конце дня мне нужно получить следующую ДФ:
Share
Year Gender Type
1990 Women type_A 0.4166
type_B 0.5833
Men type_A 0.7500
type_B 0.2500
1991 Women type_A 0.2500
type_B 0.7500
Men type_A 0.3750
type_B 0.6250
Обычно, я хотел бы сделать это с помощью div
функции, но это не похоже на работу здесь более одного индекса. Кто-то сталкивался с подобной ситуацией? Заранее спасибо !
Спасибо, я люблю тебя. Что означает уровень [0,1]? Есть ли там, где вы определяете индекс для вычисления доли, как индекс 0, является Годом, а индекс 1 - гендерным? Кроме того, вы знаете, почему «df/df.groupby (level = [0, 1]). Sum() 'не работает? –
'level' [0,1] означает уровень мультииндекса, поэтому ваш мультииндекс состоит всего из трех уровней, 0 и 1 представляют собой первые два уровня« год »и« пол »соответственно. 'df/df.groupby (level = [0, 1]). sum()' не работает, потому что 'groupby(). Синтаксис sum()' уменьшает кадр данных до меньшего размера, и, следовательно, размерность не совпадают с исходным фреймом данных, что приводит к сбою деления. С другой стороны, 'transform' сохраняет форму кадра данных, но производит агрегированные значения. – Psidom