转换数据
将 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
| |
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 |