Отображение одного значения для нескольких строк в мультииндексированном фрейме данных - PullRequest
0 голосов
/ 09 мая 2018

Я заинтересован в представлении следующих данных в пандах:

metric1 | metric 2 || % occurence | total
-----------------------------------------
   A    |    1     ||    20       |  
        |    2     ||    10       |  35
        |    3     ||    5        |
-----------------------------------------
   B    |    1     ||    40       |
        |    2     ||    10       |  65
        |    3     ||    15       |

(Для текстового поиска я бы описал это как представление разбивки по группам вместе с совокупными значениями внешнего уровня MultiIndex)

Я могу создать все столбцы, кроме столбца total: при условии, что df является плоской таблицей типа

metric1 | metric 2 | percentage 
--------------------------------
   A    |    1     |    20        
   A    |    2     |    10      
   A    |    3     |    5       
   B    |    1     |    40      
   B    |    2     |    10      
   B    |    3     |    15      

Я могу получить большую часть того, что хочу, используя

aggregate_df = df.groupby(['metric1', 'metric2']).sum()

И я могу получить итоговые значения, используя

aggregate_df.sum(level=0)

У меня вопрос, есть ли способ отобразить их вместе в одном кадре данных?

1 Ответ

0 голосов
/ 09 мая 2018

С несколькими индексами вы можете сделать это и crosstab + stack

pd.crosstab(index=df.metric1,columns=df.metric2,values=df.percentage,aggfunc='sum',margins=True).set_index('All',append=True).iloc[:-1].stack()
Out[59]: 
metric1  All  metric2
A        35   1          20
              2          10
              3           5
B        65   1          40
              2          10
              3          15
dtype: int64
...