Я только начал изучать 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()
с несколькими дополнительными шагами.