Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Оба уровня 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

Ответ 2

Более целесообразно использовать .pivot_table() вместо .groupby() когда вам нужно показать агрегаты с метками строк и столбцов.

.pivot_table() упрощает одновременное создание меток строк и столбцов и является предпочтительным, даже если вы можете получить аналогичные результаты, используя .groupby() с несколькими дополнительными шагами.