当前位置:  开发笔记 > 编程语言 > 正文

熊猫:group by和Pivot表差异

如何解决《熊猫:groupby和Pivot表差异》经验,为你挑选了1个好方法。

我刚刚开始学习熊猫,并想知道它们pandas groupbypandas pivot_table功能之间是否有任何区别.任何人都可以帮我理解它们之间的区别.帮助将不胜感激.



1> David Maust..:

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


谢谢您的回答.我对你发布的内容有疑问.如何`df.groupby(["a","b"])["c"].sum()`与`df.groupby(["a","b"] ["c"]不同)的.sum()`
你发布的那一行在语法上是不正确的,但我认为你的意思是`df.groupby(["a","b","c"]).sum()`.这将按a,b和c的唯一组合进行分组,并将剩余列(在上面的示例中不存在)相加.
对我来说,这似乎是两种获得相同结果的方法。如果在合计的groupby输出上调用unstack,将会得到pivot_table输出,对吗?
如果将“ b”从“列”移动到“索引”,即“ pd.pivot_table(df,index = [“ a”,“ b”],values = [“ c”],aggfunc = np.sum)` ,输出结果与df.groupby([“ a”,“ b”])。sum()相同。
推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有