Переименовать столбцы после группы на два столбца - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь переименовать два столбца после использования groupby из двух столбцов.

fun = {'Age':{'mean_age':'mean', 'median_age':'median'}}
groupbyClass2 = mc_response.groupby(['Country','GenderSelect']).agg(fun).reset_index()
groupbyClass2.columns = groupbyClass2.columns.droplevel(0) 

Фрейм данных выглядит следующим образом:

                        mean_age    median_age
0   Argentina   Female  33.000000   33.0
1   Argentina   Male    33.294118   32.0
2   Australia   Female  35.000000   34.0
3   Australia   Male    37.158416   36.0

Теперь я хочу переименовать первый столбец в «Страна», а второй - в «Пол». Я попробовал следующий код, однако оба столбца будут переименованы в «Пол». Как я могу это исправить?

groupbyClass2.rename(columns = {groupbyClass2.columns[0]:'Country', groupbyClass2.columns[1]:'Gender'},inplace = True)

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Вы можете указать столбец для агрегата после groupby, поэтому можно передать list кортежей для имен новых столбцов с функциями агрегата, добавить DataFrame.rename_axis для MultiIndex имен для имен столбцов после reset_index:

print (mc_response)
     Country GenderSelect  Age
0  Argentina       Female   10
1  Australia         Male   20
2  Australia       Female   30
3  Australia         Male   43

fun = [('mean_age', 'mean'), ('median_age','median')]
groupbyClass2 = (mc_response.groupby(['Country','GenderSelect'])['Age']
                            .agg(fun)
                            .rename_axis(['Country','Gender'])
                            .reset_index())
print (groupbyClass2)
     Country  Gender  mean_age  median_age
0  Argentina  Female      10.0        10.0
1  Australia  Female      30.0        30.0
2  Australia    Male      31.5        31.5

Ваше решение должно работать с назначением нового списка - сначала значения в списке, а затем преобразование всех столбцов с индексацией:

df.columns = ['Country','Gender'] + df.columns[2:].tolist()
0 голосов
/ 31 марта 2019

Это может быть проще:

df.groupby(['Country','Gender'])['Age'].agg([np.mean,np.median]).add_suffix('_age').reset_index()

Вывод:

     Country  Gender  mean_age  median_age
0  Argentina  Female      10.0        10.0
1  Australia  Female      30.0        30.0
2  Australia    Male      31.5        31.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...