Выравнивание индекса после применения agroupby к данным - PullRequest
1 голос
/ 27 сентября 2019

Я прочитал такой пример из "10 минут в пандах"

#+begin_src ipython :session alinbx :results output
 df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
                          'foo', 'bar', 'foo', 'foo'],
                    'B': ['one', 'one', 'two', 'three',
                          'two', 'two', 'one', 'three'],
                    'C': np.random.randn(8),
                    'D': np.random.randn(8)})
print(df)
#+end_src

#+RESULTS:
:      A      B         C         D
: 0  foo    one  0.556718  0.948458
: 1  bar    one  0.136203 -0.622480
: 2  foo    two -1.472084 -1.269811
: 3  bar  three  0.825478 -0.313981
: 4  foo    two -0.179626 -1.176105
: 5  bar    two -0.857654  2.008154
: 6  foo    one  0.932524  0.070442
: 7  foo  three  1.397533  1.050003

Группировка, а затем применение функции sum () к результирующим группам.

#+begin_src ipython :session alinbx :results output
print(df.groupby('A').sum())
#+end_src

#+RESULTS:
:             C         D
: A
: bar  0.104028  1.071693
: foo  1.235065 -0.397013

Проблема в том, чточто A не выровнен с B C.

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

#+begin_src ipython :session alinbx :results output
print(df.groupby(['A', 'B']).sum())
#+end_src

#+RESULTS:
:                   C         D
: A   B
: bar one    0.136203 -0.622480
:     three  0.825478 -0.313981
:     two   -0.857654  2.008154
: foo one    1.489242  1.018899
:     three  1.397533  1.050003
:     two   -1.651711 -2.445916

A, B также невыровнен по C, D

Как можно решить проблему?

Ответы [ 2 ]

5 голосов
/ 27 сентября 2019

Вы можете просто использовать pandas.DataFrame.reset_index () :

print(df.groupby(['A', 'B']).sum().reset_index())

3 голосов
/ 27 сентября 2019

Добавить as_index=False параметр к DataFrame.groupby:

as_index: bool , по умолчанию True

Для агрегированного вывода,вернуть объект с групповыми метками в качестве индекса.Относится только к вводу данных.as_index = False - эффективно сгруппированный вывод в стиле «SQL».

print(df.groupby('A', as_index=False).sum())

print(df.groupby(['A', 'B'], as_index=False).sum())

Хорошо работает в основном в агрегатных функциях, таких как sum, mean, count, median, first, last.

Но не работает с size, необходимо добавить .reset_index(name='count').

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