#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
Комментариев нет:
Отправить комментарий