Я только начал изучать Pandas и задавался вопросом, есть ли разница между функциями pandas groupby и pandas pivot_table. Может ли кто-нибудь помочь мне понять разницу между ними.
Помощь будет оценена.
Pandas: групповая и разностная таблица
Ответ 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() с несколькими дополнительными шагами.