我刚刚开始学习Pandas,并想知道pandas groupby
和pandas pivot_table
函数之间是否存在任何差异。任何人都可以帮我理解它们之间的区别。
帮助将不胜感激。
答案 0 :(得分:50)
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
答案 1 :(得分:1)
当您需要同时显示带有行标签和列标签的汇总时,更适合使用.pivot_table()
而不是.groupby()
。
.pivot_tables()
使得同时创建行标签和列标签变得容易,这是可取的,尽管您可以使用.groupby()
获得相似的结果,而无需执行额外的步骤。