изменить размер группы в 1 из 2 в пандах - PullRequest
1 голос
/ 15 октября 2019

Я выполнил групповую передачу:

df=pd.DataFrame({'grp':['a','a','b','b'],'value':[1,2,1,10]})

df.groupby('grp').agg({'value':['mean','median']})

и получил:

enter image description here

как мне изменить это на обычный dfчто я могу манипулировать и получить доступ?

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Немного измените свой код - добавьте столбец для агрегирования после groupby и передайте список функций:

df1 = df.groupby('grp')['value'].agg(['mean','median'])
print (df1)
     mean  median
grp              
a     1.5     1.5
b     5.5     5.5

Другая идея - удалить первый уровень MultiIndex, но если больше столбцоввозможно получить дублированные имена столбцов:

df1 = df.groupby('grp').agg({'value':['mean','median']})

df1.columns = df1.columns.droplevel(0)
print (df1)

     mean  median
grp              
a     1.5     1.5
b     5.5     5.5

Тогда лучше во избежание дублирования имен столбцов использовать map с join:

df1 = df.groupby('grp').agg({'value':['mean','median']})

df1.columns = df1.columns.map('_'.join)
print (df1)
     value_mean  value_median
grp                          
a           1.5           1.5
b           5.5           5.5

или для панд 0.25 использовать именованная агрегация :

df2 = df.groupby("grp").agg(a=pd.NamedAgg(column='value', aggfunc='mean'),
                            b=pd.NamedAgg(column='value', aggfunc='median'))

print (df2)

       a    b
grp          
a    1.5  1.5
b    5.5  5.5
0 голосов
/ 15 октября 2019

Вы можете просто сбросить уровень столбцов и сбросить индекс DataFrame следующим образом:

df=pd.DataFrame({'grp':['a','a','b','b'],'value':[1,2,1,10]})

df1 = df.groupby('grp').agg({'value':['mean','median']})
df1.columns = df1.columns.droplevel(0)
df1.reset_index()

Кроме того, если вы хотите комбинированный столбец, вы можете:

df1.columns = df1.columns.map('_'.join)

вместо:

df1.columns = df1.columns.droplevel(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...