Pandas_规整数据_转换数据_pivot()

转换数据

将 column values 设置为 index / columns,重构DataFrame

(将列数据设定为行索引和列索引(改变 DataFrame 的结构,不做任何运算))

df.pivot() 将长数据集转换成宽数据集

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

参数类型说明
index

string

object

列名(可选项)

将现有的 column values 设置为新 DataFrame 的 index,如果忽略,则使用现有的index

columns

string

object

列名

将现有的 column values 设置为新 DataFrame 的 columns

values

string

object

列名(可选项)

将现有的 column values 设置为新 DataFrame 的 values,如果忽略,则将其他的 column values 全部作为新DataFrame 的 values

>>> df
    foo   bar  baz  zoo
0   one   A    1    x
1   one   B    2    y
2   one   C    3    z
3   two   A    4    q
4   two   B    5    w
5   two   C    6    t

>>> df.pivot('foo', 'bar', 'baz') / df.pivot(index='foo', columns='bar', values='baz')
bar  A   B   C
foo
one  1   2   3
two  4   5   6

#没有设置values时,使用其余的所有列作为values
#生成多级列索引,columns设置的列索引作为最内层列索引
>>> df.pivot(index='foo', columns='bar') / df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])
      baz       zoo
bar   A  B  C   A  B  C
foo
one   1  2  3   x  y  z
two   4  5  6   q  w  t

>>> df1= df.pivot(index='foo', columns='bar') 
>>> df1['baz']
      baz    
bar   A  B  C
foo
one   1  2  3
two   4  5  6
>>> df1['bar']
      zoo
bar   A  B  C
foo
one   x  y  z
two   q  w  t

#没有设置index时,使用现有的index作为新的 DataFrame 的index
#产生缺省值,用NaN填充
>>> df.pivot(columns='bar',values='baz')
bar	A	B	C
0	1.0	NaN	NaN
1	NaN	2.0	NaN
2	NaN	NaN	3.0
3	4.0	NaN	NaN
4	NaN	5.0	NaN
5	NaN	NaN	6.0

-------------------------------------------------------------------------------------------------------------------------------------

df.pivot() 与 df.unstack()

df.pivot()将 column values 设定为index / columns

df.unstack()将 index 转换为 columns

pivot() 其实就是用 set_index() 创建层次化索引,再用 unstack() 重塑

df
     foo    bar   baz  
0    one   A     1    
1    one   B     2    
2    two   A     3    
3    two   B     4    

 

df1.pivot('foo','bar')df.set_index(['foo','bar']) '设定df的index
df.set_index(['foo','bar']).unstack('bar') ‘内层index 转换为 columns
          baz       
bar       A      B 
foo
one      1      2 
two      3      4  

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值