Pandas: групповая и разностная таблица

23

Я только начал изучать Pandas и задавался вопросом, есть ли разница между функциями pandas groupby и pandas pivot_table . Может ли кто-нибудь помочь мне понять разницу между ними. Помощь будет оценена.

    
задан user4943236 10.01.2016 в 07:38
источник

1 ответ

32

Оба pivot_table и groupby используются для агрегирования вашего фрейма данных. Разница заключается только в том, что касается формы результата.

Использование pd.pivot_table(df, index=["a"], columns=["b"], values=["c"], aggfunc=np.sum) создается таблица, в которой a находится на оси строки, b находится на оси столбца, а значения - это сумма c .

Пример:

df = pd.DataFrame({"a": [1,2,3,1,2,3], "b":[1,1,1,2,2,2], "c":np.random.rand(6)})
pd.pivot_table(df, index=["a"], columns=["b"], values=["c"], aggfunc=np.sum)

b         1         2
a                    
1  0.528470  0.484766
2  0.187277  0.144326
3  0.866832  0.650100

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

В этом примере мы создаем серию сумм значений c , сгруппированных по всем уникальным комбинациям a и b .

df.groupby(['a','b'])['c'].sum()

a  b
1  1    0.528470
   2    0.484766
2  1    0.187277
   2    0.144326
3  1    0.866832
   2    0.650100
Name: c, dtype: float64

Аналогичное использование groupby - это если мы опустим ['c'] . В этом случае он создает блок данных (а не ряд) сумм всех остальных столбцов, сгруппированных по уникальным значениям a и b .

print df.groupby(["a","b"]).sum()
            c
a b          
1 1  0.528470
  2  0.484766
2 1  0.187277
  2  0.144326
3 1  0.866832
  2  0.650100
    
ответ дан David Maust 10.01.2016 в 07:45
источник
  • Спасибо за ваш ответ. Я сомневаюсь в том, что вы опубликовали. Как df.groupby (["a", "b"]) ["c"]. Sum () отличается от df.groupby (["a", "b"] ["c"]). Sum ( ) –  user4943236 10.01.2016 в 08:06
  • Строка, которую вы опубликовали, не является синтаксически правильной, но я думаю, вы имеете в виду df.groupby (["a", "b", "c"]). sum (). Это будет группироваться по уникальным комбинациям a, b и c и суммировать остальные столбцы (которые в приведенных выше примерах отсутствуют). –  David Maust 10.01.2016 в 08:09
  • Если вы переместите «b» из столбцов в индекс, то есть pd.pivot_table (df, index = ["a", "b"], values ​​= ["c"], aggfunc = np.sum), вывод такая же, как из df.groupby (["a", "b"]). sum (). –  HenriV 04.05.2018 в 12:11