Общая сумма по групповым пандам - PullRequest
1 голос
/ 21 ноября 2019

У меня есть кадр данных, как показано ниже, который представляет собой использование площади всего города, скажем, Бангалор.

Sector   Plot   Usage        Status             Area
A        1      Villa        Constructed        40
A        2      Residential  Constructed        50
A        3      Substation   Not_Constructed    120
A        4      Villa        Not_Constructed    60
A        5      Residential  Not_Constructed    30
A        6      Substation   Constructed        100
B        1      Villa        Constructed        80
B        2      Residential  Constructed        60
B        3      Substation   Not_Constructed    40
B        4      Villa        Not_Constructed    80
B        5      Residential  Not_Constructed    100
B        6      Substation   Constructed        40

Бангалор состоит из двух секторов A и B.

Из вышеизложенного я быхотел бы рассчитать общую площадь Бангалора и его распределение использования.

Ожидаемый результат:

City           Total_Area  %_Villa  %_Resid  %_Substation  %_Constructed  %_Not_Constructed
Bangalore(A+B) 800         32.5     30       37.5          46.25          53.75

1 Ответ

2 голосов
/ 21 ноября 2019

Я думаю, вам нужно установить скалярное значение в столбец city перед применением решения (если есть только сектора A и B):

df['Sector'] = 'Bangalore(A+B)'
#aggregate sum per 2 columns Sector and Usage
df1 = df.groupby(['Sector', 'Usage'])['Area'].sum()
#percentage by division of total per Sector
df1 = df1.div(df1.sum(level=0), level=0).unstack(fill_value=0).mul(100).add_prefix('%_')
#aggregate sum per 2 columns Sector and Status
df2 = df.groupby(['Sector', 'Status'])['Area'].sum()
df2 = df2.div(df2.sum(level=0), level=0).unstack(fill_value=0).mul(100).add_prefix('%_')
#total Area per Sector
s = df.groupby('Sector')['Area'].sum().rename('Total_area')
#join all together
dfA = pd.concat([s, df1, df2], axis=1).reset_index()
print (dfA)
           Sector  Total_area  %_Residential  %_Substation  %_Villa  \
0  Bangalore(A+B)         800           30.0          37.5     32.5   

   %_Constructed  %_Not_Constructed  
0          46.25              53.75  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...