Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Как в pandas преобразовать строки в столбцы (PIVOT) по заданным элементам?

#python #pandas #dataframe #numpy #pivot


При решении статистической задачки получаю таблицу CSV с примерно такими данными:

expr  Therapy
100   A
98    B
87    C
97    D
102   C
96    B
92    D
88    A


Преобразовываю в dataframe, чтобы потом оттуда делать графики через matplotlib. Но
перед этим мне надо посчитать статистические показатели для четырех выборок (A, B,
C, D). Можно ли в pandas преобразовать исходную структуру таблицы и получить такую?

A   B   C   D
100 98  87  97
88  96  102 92


Или проще сначала прочитать csv в переменную, сделать словарь, в нем посчитать все
показатели (медиану, внутригрупповой квадрат и т.п.), а потом уже отправлять все в
dataframe?        
    


Ответы

Ответ 1



Попробуйте так: In [7]: res = (df.assign(idx=df.groupby('Therapy').cumcount()) .pivot_table(index='idx', columns='Therapy', values='expr', aggfunc='sum')) In [8]: res Out[8]: Therapy A B C D idx 0 100 98 87 97 1 88 96 102 92 Пошагово: для того чтобы воспользоваться методом DataFrame.pivot_table() нам понадобятся значения, которые будут выступать в качестве индекса строк в результирующей выборке - создаем "на лету" новый столбец idx: In [10]: df.assign(idx=df.groupby('Therapy').cumcount()) Out[10]: expr Therapy idx 0 100 A 0 1 98 B 0 2 87 C 0 3 97 D 0 4 102 C 1 5 96 B 1 6 92 D 1 7 88 A 1 теперь можно воспользоваться pivot_table(): In [11]: df.assign(idx=df.groupby('Therapy').cumcount()).pivot_table(index='idx', columns='Therapy', values='expr', aggfunc='sum') Out[11]: Therapy A B C D idx 0 100 98 87 97 1 88 96 102 92

Ответ 2



Для того, чтобы расчитать различные статистики с группировкой по Therapy необязательно разворачивать DataFrame: In [20]: df.groupby('Therapy')['expr'].agg(['median', 'sum', 'std']) Out[20]: median sum std Therapy A 94.0 188 8.485281 B 97.0 194 1.414214 C 94.5 189 10.606602 D 94.5 189 3.535534

Комментариев нет:

Отправить комментарий