Сумма столбца для каждого индекса в случае MultiIndex - PullRequest
0 голосов
/ 07 января 2019

У меня есть такая таблица, это в основном миниатюрная версия того, что у меня есть.

Grade                   G10     G11      G12    G13 

Depth(m)   Thickness                                

0-50        0-0.9      0.0452   NaN     0.0092  NaN 
            0.9-1.2    0.0355   0.0249  NaN     NaN 
            1.21-1.5   0.0084   0.0764  0.0066  NaN 

100-150     0-0.9      0.0340   0.0579  0.0994  0.0358  
            0.9-1.2    0.0823   0.1495  0.0877  0.0881  
            1.21-1.5   0.2296   0.1572  0.1385  0.1117  
            1.51-1.8   0.1991   0.2327  0.1597  0.1834  
            1.81-2.0   0.1047   0.0700  0.0809  0.0364  

150-200     0-0.9       NaN     0.0189  0.0163  NaN 
            0.9-1.2     NaN     0.0494  0.0168  0.0009  
            1.21-1.5    0.0039  0.0423  0.0420  0.0145  
            1.51-1.8    0.0028  0.0853  0.0179  NaN 
            1.81-2.0    NaN     0.0466  NaN     NaN 

Вот чего я хочу достичь:

Grade                   G10     G11      G12    G13 

Depth(m)   Thickness                                

0-50        0-0.9      0.0452   NaN     0.0092  NaN 
            0.9-1.2    0.0355   0.0249  NaN     NaN 
            1.21-1.5   0.0084   0.0764  0.0066  NaN 
total(0-50)            //sum of the Grade column

100-150     0-0.9      0.0340   0.0579  0.0994  0.0358  
            0.9-1.2    0.0823   0.1495  0.0877  0.0881  
            1.21-1.5   0.2296   0.1572  0.1385  0.1117  
            1.51-1.8   0.1991   0.2327  0.1597  0.1834  
            1.81-2.0   0.1047   0.0700  0.0809  0.0364  
total(50-100)          //sum of the Grade column

150-200     0-0.9       NaN     0.0189  0.0163  NaN 
            0.9-1.2     NaN     0.0494  0.0168  0.0009  
            1.21-1.5    0.0039  0.0423  0.0420  0.0145  
            1.51-1.8    0.0028  0.0853  0.0179  NaN 
            1.81-2.0    NaN     0.0466  NaN     NaN 
total(150-200)          //sum of the Grade column

Поэтому я хочу добавить новую строку после каждого диапазона оценок и вычислить сумму оценок для этого конкретного диапазона оценок.

Код, который я пробовал:

x=df.pivot_table(index='Depth(m)',
           margins=True,
           margins_name='Total',  
           aggfunc=sum) 
x.iloc[:,:]  

Вывод получен: Это выводит сумму, но не в том же столбце, но создает новый столбец, подобный этому:

Grade       G10       G11    G12    G13

Depth(m)                                

0-50        0.0933  0.1152  0.0568  0.0526  
100-150     0.6766  0.7527  0.8838  0.5428  
150-200     0.0067  0.2425  0.0930  0.0154  

Искал и много чего пробовал, Буду рад, если кто-нибудь сможет помочь,

Лучшее, Анмол Гупта.

EDIT:

Код для создания таблицы выше:

p = df.pivot_table(index=['Depth(m)','Thickness'], 
columns='Grade',values="Proved Reserve",aggfunc=np.sum)

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Настройка (Для всех, кто пытается ответить)

from numpy import nan
d = {'G10': {('0-50', '0-0.9'): 0.0452, ('0-50', '0.9-1.2'): 0.0355, ('0-50', '1.21-1.5'): 0.0084, ('100-150', '0-0.9'): 0.034, ('100-150', '0.9-1.2'): 0.0823, ('100-150', '1.21-1.5'): 0.2296, ('100-150', '1.51-1.8'): 0.1991, ('100-150', '1.81-2.0'): 0.1047, ('150-200', '0-0.9'): nan, ('150-200', '0.9-1.2'): nan, ('150-200', '1.21-1.5'): 0.0039, ('150-200', '1.51-1.8'): 0.0028, ('150-200', '1.81-2.0'): nan}, 'G11': {('0-50', '0-0.9'): nan, ('0-50', '0.9-1.2'): 0.0249, ('0-50', '1.21-1.5'): 0.0764, ('100-150', '0-0.9'): 0.0579, ('100-150', '0.9-1.2'): 0.1495, ('100-150', '1.21-1.5'): 0.1572, ('100-150', '1.51-1.8'): 0.2327, ('100-150', '1.81-2.0'): 0.07, ('150-200', '0-0.9'): 0.0189, ('150-200', '0.9-1.2'): 0.0494, ('150-200', '1.21-1.5'): 0.0423, ('150-200', '1.51-1.8'): 0.0853, ('150-200', '1.81-2.0'): 0.0466}, 'G12': {('0-50', '0-0.9'): 0.0092, ('0-50', '0.9-1.2'): nan, ('0-50', '1.21-1.5'): 0.0066, ('100-150', '0-0.9'): 0.0994, ('100-150', '0.9-1.2'): 0.0877, ('100-150', '1.21-1.5'): 0.1385, ('100-150', '1.51-1.8'): 0.1597, ('100-150', '1.81-2.0'): 0.0809, ('150-200', '0-0.9'): 0.0163, ('150-200', '0.9-1.2'): 0.0168, ('150-200', '1.21-1.5'): 0.042, ('150-200', '1.51-1.8'): 0.0179, ('150-200', '1.81-2.0'): nan}, 'G13': {('0-50', '0-0.9'): nan, ('0-50', '0.9-1.2'): nan, ('0-50', '1.21-1.5'): nan, ('100-150', '0-0.9'): 0.0358, ('100-150', '0.9-1.2'): 0.0881, ('100-150', '1.21-1.5'): 0.1117, ('100-150', '1.51-1.8'): 0.1834, ('100-150', '1.81-2.0'): 0.0364, ('150-200', '0-0.9'): nan, ('150-200', '0.9-1.2'): 0.0009, ('150-200', '1.21-1.5'): 0.0145, ('150-200', '1.51-1.8'): nan, ('150-200', '1.81-2.0'): nan}}
df = pd.DataFrame(d)
df = df.rename_axis(['Depth(m)', 'Thickness'])
df = df.rename_axis(['Grade'], axis=1)

Использование groupby, set_index и sort_index:

a = df.groupby(level=0).sum().assign(Thickness='total').set_index('Thickness', append=True)
pd.concat([df, a]).sort_index(0)

Grade                  G10     G11     G12     G13
Depth(m) Thickness
0-50     0-0.9      0.0452     NaN  0.0092     NaN
         0.9-1.2    0.0355  0.0249     NaN     NaN
         1.21-1.5   0.0084  0.0764  0.0066     NaN
         total      0.0891  0.1013  0.0158  0.0000
100-150  0-0.9      0.0340  0.0579  0.0994  0.0358
         0.9-1.2    0.0823  0.1495  0.0877  0.0881
         1.21-1.5   0.2296  0.1572  0.1385  0.1117
         1.51-1.8   0.1991  0.2327  0.1597  0.1834
         1.81-2.0   0.1047  0.0700  0.0809  0.0364
         total      0.6497  0.6673  0.5662  0.4554
150-200  0-0.9         NaN  0.0189  0.0163     NaN
         0.9-1.2       NaN  0.0494  0.0168  0.0009
         1.21-1.5   0.0039  0.0423  0.0420  0.0145
         1.51-1.8   0.0028  0.0853  0.0179     NaN
         1.81-2.0      NaN  0.0466     NaN     NaN
         total      0.0067  0.2425  0.0930  0.0154
0 голосов
/ 07 января 2019

Попробуйте это:

total_df = df.sum(level=0).assign(Thickness='')\
             .rename(index=lambda x: x+' Total')\
             .set_index('Thickness', append=True)
pd.concat([df,total_df]).sort_index()

Выход:

                             G10     G11     G12     G13
Grade Depth(m) Thickness                                
0-50           0-0.9      0.0452     NaN  0.0092     NaN
               0.9-1.2    0.0355  0.0249     NaN     NaN
               1.21-1.5   0.0084  0.0764  0.0066     NaN
0-50 Total                0.0891  0.1013  0.0158  0.0000
100-150        0-0.9      0.0340  0.0579  0.0994  0.0358
               0.9-1.2    0.0823  0.1495  0.0877  0.0881
               1.21-1.5   0.2296  0.1572  0.1385  0.1117
               1.51-1.8   0.1991  0.2327  0.1597  0.1834
               1.81-2.0   0.1047  0.0700  0.0809  0.0364
100-150 Total             0.6497  0.6673  0.5662  0.4554
150-200        0-0.9         NaN  0.0189  0.0163     NaN
               0.9-1.2       NaN  0.0494  0.0168  0.0009
               1.21-1.5   0.0039  0.0423  0.0420  0.0145
               1.51-1.8   0.0028  0.0853  0.0179     NaN
               1.81-2.0      NaN  0.0466     NaN     NaN
150-200 Total             0.0067  0.2425  0.0930  0.0154
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...