利用python进行数据分析学习笔记(数据规整:聚合、合并和重塑)

层次化索引

data = pd.Series(np.random.randn(9),
                 index=[['a','a','a','b','b','c','c','d','d'],
                 [1,2,3,1,3,1,2,2,3]])
data.index

创建一个Series,通过index属性可以获取其索引。



使用索引和切片选择层次化Series的数据。

选择第一层的索引b


切片选择索引b-c


通过loc选择索引b、c

选择第一层索引的第二行数据。


通过unstack方法将两层索引的Series转为DataFrame,第二层转为列索引。


unstack的逆运算是stack,将DataFrame转为Series,列索引变成行索引的第二层。


DataFrame的每条轴都可以有分层索引。

frame = pd.DataFrame(np.arange(12).reshape((4,3)),
                     index=[['a','a','b','b'],[1,2,1,2]],
                     columns=[['Ohio','Ohio','Colorado'],
                             ['Green','Red','Green']])

创建一个4行3列的DataFrame,行列索引都有两层。


通过index.names可以为行索引命名,columns.names为列索引命名。

frame.index.names = ['key1','key2']
frame.columns.names = ['state','color']

通过索引选取列分组。


可以单独创建MultiIndex然后复用。

pd.MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],
                          names=['state','color'])

a = pd.MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],
                              names=['state','color'])
b = pd.Series(np.random.randn(3),index=a)


重排与分级排序

DataFrame的swaplevel方法可以将分层位置对换。

frame.swaplevel('key1','key2')

sort_index方法根据单个级别中的值对数据进行排序。

frame.sort_index(level=1)
frame.sort_index(level=0)

level=1表示按照key2列进行排序。

level=0表示按照key1列进行排序。


结合swaplevel方法和sort_index方法

frame.swaplevel(0,1).sort_index(level=0)


根据级别汇总统计

sum函数通过传入level参数可以对指定列进行汇总。

frame.sum(level='key2')

默认axis=0,即行索引,改为axis=1可以对列索引进行求和

frame.sum(level='color',axis=1)    #对第二层列索引进行求和。



使用DataFrame的列进行索引

frame = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1),^M
                      'c': ['one', 'one', 'one', 'two', 'two',^M
                            'two', 'two'],^M
                      'd': [0, 1, 2, 0, 1, 2, 3]})
frame2 = frame.set_index(['c','d'])

创建一个七行四列的DataFrame,通过set_index方法可以将DataFrame中的指定列设为行索引。如set_index(['c','d'])表示将c列和d列分别设置为一级行索引和二级行索引。

默认情况下会将设置为索引的原数据删除,可以设置drop=False参数保留。

frame.set_index(['c','d'],drop=False)

reset_index的功能跟set_index刚好相反,层次化索引被转回列中。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值