краткий способ выравнивания многоиндексных столбцов - PullRequest
0 голосов
/ 28 мая 2018

Использование более 1 функции в агрегатном группировании приводит к мультииндексу, который я затем хочу сгладить.

пример:

df = pd.DataFrame(
    {'A': [1,1,1,2,2,2,3,3,3],
     'B': np.random.random(9),
     'C': np.random.random(9)}
)
out = df.groupby('A').agg({'B': [np.mean, np.std], 'C': np.median})

# example output

          B                   C
       mean       std    median
A
1  0.791846  0.091657  0.394167
2  0.156290  0.202142  0.453871
3  0.482282  0.382391  0.892514

В настоящее время я делаю это вручную, какэто

out.columns = ['B_mean', 'B_std', 'C_median']

, которое дает мне желаемый результат

     B_mean     B_std  C_median
A
1  0.791846  0.091657  0.394167
2  0.156290  0.202142  0.453871
3  0.482282  0.382391  0.892514

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

Есть ли способ вернуть уплощенный индекс вместо многоиндексного при групповом агрегировании?

Мне нужно сплющить столбцы, чтобы сохранитьв текстовый файл, который затем будет прочитан другой программой, которая не обрабатывает многоиндексированные столбцы.

Ответы [ 2 ]

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

Вы можете сделать map join со столбцами

out.columns = out.columns.map('_'.join)
out
Out[23]: 
     B_mean     B_std  C_median
A                              
1  0.204825  0.169408  0.926347
2  0.362184  0.404272  0.224119
3  0.533502  0.380614  0.218105

По какой-то причине (когда столбец содержит int), мне нравится этот способ лучше

out.columns.map('{0[0]}_{0[1]}'.format) 
Out[27]: Index(['B_mean', 'B_std', 'C_median'], dtype='object')
0 голосов
/ 28 мая 2018

Вы можете использовать:

out.columns = list(map('_'.join, out.columns.values))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...