暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python pivot详解

EE漫谈 2019-08-03
899

 

Python的pivot函数用来重塑数据,官方定义如下所示

pivot(index=None, columns=None, values=None)

index: 可选参数。设置新dataframe的行索引,如果未指明,就用当前已存在的行索引。

columns:必选参数。用来设置作为新dataframe的列索引。

values:可选参数。在原dataframe中选中某一列/几列的值,使其在新dataframe的列里显示。如果不指定,则默认将原dataframe中所有的列都显示,这里需要注意:为了将所有的值都显示出来,就会出现多层行索引的情况。

示例如下

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3, 'B': ['G', 'H', 'K'] * 4, 'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2, 'D': np.random.randn(12), 'E': np.random.randn(12)})

 

不设置行索引(不指定index),设置新的列索引为B,values取C,如下所示

 

指定values为C和D时,C和D就变成了层次化的列索引。如下图所示

 

其实可以这样理解:上图为 values只为C时的结果+ values只为D时的结果

values值取默认时,如下所示(values=A +C +D +E)

 

使用pivot函数,如果index或者columns中出现了多重值的情况,就会出错。

ValueError: Index contains duplicate entries, cannot reshape

举例如下:df.pivot(index='A', columns='B', values='D')

 

这是为什么呢?设置df 的index为A,在对df进行reshape时,A列的‘one’需要进行合并,如下图所示

 

设置columns为B,则B列的G,H,K列开始合并,如下图所示

 

设置values值为D,此时就会出现问题:one和G对应的数值到底是-0.3,还是0.07呢?Python无法进行分辨,就会报错。

 

 

通过上面的分析,就可以发现pivot函数就是set_index()和unstack()函数的集合。

 

df.set_index([‘B’,  ’D’])

 

再将D列unstack,就与pivot效果完全相同

 

通过以上的学习,你掌握pivot的用法了么?


文章转载自EE漫谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论