132、pandas操作——重塑层次化索引

重塑或轴向旋转指的是用于重新排列表格型数据的基础运算。
层次化索引能够为DataFrame数据的重排任务提供一种就有良好一致性山东方式。主要功能有:
1、stack:将数据的列“旋转”为行
2、unstack:将数据的行“旋转”为列

下面是一个DataFrame对象,其中行列索引均为字符串:
1.png

使用stack方法将列转为行,得到一个Series:
2.png

对于一个层次化索引的Series,可以用unstack将其重排为一个DataFrame:
3.png

默认情况下,unstack操作的是内层(stack也是如此)。传入分层级别的编号或名称即可对其他级别进行unstack操作:
4.png

如果在分组中找不到级别值,则unstack操作会引入缺失数据:
5.png

stack默认会滤除缺失数据:
6.png

对DataFrame进行unstack操作时,作为旋转轴的级别将会成为结果中最低级别:
7.png

源码:

# coding: utf-8

# ### 重塑层次化索引

# stack:将数据的列“旋转”为行
# 
# unstack:将数据的行“旋转”为列

# In[1]:

import numpy as np
from pandas import Series,DataFrame
import pandas as pd


# In[2]:

data = DataFrame(np.arange(6).reshape((2,3)),
                 index=pd.Index(['Ohio','Colorado'],name='state'),
                 columns=pd.Index(['one','two','three'],name='number'))
print(data)


# In[3]:

# 使用stack方法将列转为行
result = data.stack()
print(result)


# In[4]:

# 对于层次化索引的Series,使用unstack将其重排为DataFrame对象
result.unstack()


# In[5]:

# 传入分层级别编号或名称进行unstack操作
result.unstack(0)


# In[6]:

# 或传入名称进行unstack操作
result.unstack('state')


# In[7]:

# 如果在分组中找不到级别值,则unstack操作会引入缺失数据
s1 = Series([0,1,2,3],index=['a','b','c','d'])
s2 = Series([4,5,6],index=['c','d','e'])
data2 = pd.concat([s1,s2],keys=['one','two'])
print(data2)
data2.unstack()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容