熊猫:group by和Pivot表差异

时间:2016-01-10 06:38:27

标签: python pandas

我刚刚开始学习Pandas,并想知道pandas groupbypandas pivot_table函数之间是否存在任何差异。任何人都可以帮我理解它们之间的区别。 帮助将不胜感激。

2 个答案:

答案 0 :(得分:50)

pivot_tablegroupby都用于汇总您的数据框。区别仅在于结果的形状。

使用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的总和,按ab的所有唯一组合进行分组。

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']。在这种情况下,它会创建一个数据框(而不是一系列),其中所有剩余列的总和按ab的唯一值分组。

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()获得相似的结果,而无需执行额外的步骤。