本文转自:https://blog.csdn.net/Asher117/article/details/85047899
仅作为个人笔记之用,如有其它需求,请联系该文原创作者。
摘要
前面给大家分享了pandas做数据合并的两篇[pandas.merge]和[pandas.cancat]的用法。今天这篇主要讲的是pandas的DataFrame的轴旋转操作,stack和unstack的用法。
首先,要知道以下五点:
1.stack:将数据的列“旋转”为行
2.unstack:将数据的行“旋转”为列
3.stack和unstack默认操作为最内层
4.stack和unstack默认旋转轴的级别将会成果结果中的最低级别(最内层)
5.stack和unstack为一组逆运算操作
第一点和第二点以及第五点比较好懂,可能乍看第三点和第四点会不太理解,没关系,看看具体下面的例子,你就懂了。
创建DataFrame,行索引名为state,列索引名为number
import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(6).reshape((2,3)),index=pd.Index(['Ohio','Colorado'],name='state')
,columns=pd.Index(['one','two','three'],name='number'))
将DataFrame的列旋转为行,即stack操作。
result = data.stack()
result
从下图中结果来理解上述点4,stack操作后将列索引number旋转为行索引,并且置于行索引的最内层(外层为索引state),也就是将旋转轴(number)的结果置于 最低级别。
将DataFrame的行旋转为列,即unstack操作。
result.unstack()
从下面结果理解上述点3,unstack操作默认将内层索引number旋转为列索引。
同时,也可以指定分层级别或者索引名称来指定操作级别,下面做错同样会得到上面的结果。
stack和unstack逆运算
s1 = pd.Series([0,1,2,3],index=list('abcd'))
s2 = pd.Series([4,5,6],index=list('cde'))
data2 = pd.concat([s1,s2],keys=['one','two'])
data2
data2.unstack().stack()