首页 > 其他分享 >层次化索引

层次化索引

时间:2023-10-26 23:12:21浏览次数:31  
标签:层次化 index MultiIndex pd 索引 B2 B3

先是对Series来说

import numpy as np
import pandas as pd
# 两层索引对于Series对象来说,没有columns
sum_series=pd.Series([15848,13472,12073.8,7813,7446,6444,15230,8269],index=[
    
    ['河北省','河北省','河北省','河北省',
                                                                            
     '河南省','河南省','河南省','河南省'],
                                                                            
    ['石家庄市','唐山市','邯郸市','秦皇岛市',
                                                                             
     '郑州市','开封市','洛阳市','新乡市']])
print(sum_series)
# 多层索引
sum_series=pd.Series([15848,13472,12073.8,7813,7446,6444,15230,8269],index=[
    ['河北省','河北省','河北省','河北省',
                                                                            
     '河南省','河南省','河南省','河南省'],
                                                                            
    ['石家庄市','唐山市','邯郸市','秦皇岛市',
                                                                             
     '郑州市','开封市','洛阳市','新乡市']])
print(sum_series)       
​
​
# ---------------------------下面是输出结果------------------------------
河北省  石家庄市    15848.0
     唐山市     13472.0
     邯郸市     12073.8
     秦皇岛市     7813.0
河南省  郑州市      7446.0
     开封市      6444.0
     洛阳市     15230.0
     新乡市      8269.0
dtype: float64
--------------------------------------------
河北省  石家庄市    15848.0
     唐山市     13472.0
     邯郸市     12073.8
     秦皇岛市     7813.0
河南省  郑州市      7446.0
     开封市      6444.0
     洛阳市     15230.0
     新乡市      8269.0
dtype: float64

 

 

对DataFrame来说

# 对于DataFrame对象来说(可以增加列索引)
sum_df=pd.DataFrame([15848,13472,12073.8,7813,7446,6444,15230,8269],index=[
   ['河北省','河北省','河北省','河北省',
                                                                            
     '河南省','河南省','河南省','河南省'],
                                                                            
    ['石家庄市','唐山市','邯郸市','秦皇岛市',
                                                                             
     '郑州市','开封市','洛阳市','新乡市']],
    columns=["占地面积"])
print(sum_df)  
​
​
# ---------------------------下面是输出结果-----------------------------
             占地面积
河北省 石家庄市  15848.0
    唐山市   13472.0
    邯郸市   12073.8
    秦皇岛市   7813.0
河南省 郑州市    7446.0
    开封市    6444.0
    洛阳市   15230.0
    新乡市    8269.0

 

 

MultiIndex方法

from_tuples

# MultiIndex.from_tuples():将元组列表转换为MultiIndex
# MultiIndex.from_arrays():将数组列标转换为MultiIndex
# MultiIndex.from_product():从多个集合的笛卡尔乘积中创建一个MultiIndex
# 使用上面的任意一种方法,都可以返回一个MultiIndex类对象,里面有三个重要的属性,分别是levels,labels,names
# levels表示每个级别的唯一标签
# labels表示每一个索引列中每个元素在levels中对应的第几个元素
# names表示可以设置索引等级名称
 
# 通过from_tuples()方法创建MultiIndex对象
from pandas import MultiIndex
# 创建包含多个元组的列表
list_tuples=[('A','A1'),('A','A2'),('B','B1'),('B','B2'),('B','B3')]
# 根据元组列表创建一个MultiIndex对象(元组的第一个元素是外层索引,第二个元素是内层索引)
multi_index=MultiIndex.from_tuples(list_tuples,names=['外层索引','内层索引'])
multi_index
​
​
# -------------------------------- 输出结果为-------------------------------
MultiIndex([('A', 'A1'),
            ('A', 'A2'),
            ('B', 'B1'),
            ('B', 'B2'),
            ('B', 'B3')],
           names=['外层索引', '内层索引'])

 

# 接下来创建一个DataFrame对象,把刚刚的multi_index传给index
import pandas as pd 
values=[[1,2,3],[5,2,3],[2,5,6],[7,8,9],[3,6,7]]
de_index=pd.DataFrame(data=values,index=multi_index)
de_index
​
​
#-------------------------------输出结果为--------------------------------
                0  1  2
外层索引 内层索引         
   A      A1    1  2  3
          A2    5  2  3
   B      B1    2  5  6
          B2    7  8  9
          B3    3  6  7

 

 

 

from_arrays

# 通过from_arrays()创建MultiIndex对象(数组的第一列和第二列元素个数一定要相等,不然会报错)
from pandas import MultiIndex
# 根据列表去创建一个MultiIndex对象(用二维数组来进行)
multi_array=MultiIndex.from_arrays([['A','B','A','B','B'],
                                    ['A1','A2','B1','B2','B3']],
                                         names=['外层索引','内层索引'])
multi_array
​
​
# ------------------------------------输出结果为-----------------------------------
MultiIndex([('A', 'A1'),
            ('B', 'A2'),
            ('A', 'B1'),
            ('B', 'B2'),
            ('B', 'B3')],
           names=['外层索引', '内层索引'])
 
# 接下来创建一个DataFrane对象
import pandas as pd   
# 如果外层索引是两个连续的值,那么会进行约简
df_array=pd.DataFrame([[1,2,3],[5,2,3],[2,5,6],[7,8,9],[3,6,7]],index=multi_array)
df_array
​
​
# ---------------------------------输出结果为-----------------------------------
               0  1  2
外层索引 内层索引         
    A    A1    1  2  3
    B    A2    5  2  3
    A    B1    2  5  6
    B    B2    7  8  9
         B3    3  6  7

 

 

from_product(笛卡尔积)

# 通过MultiIndex.from_product方法创建MultiIndex对象(这是将二维数组的第一列和第二列进行笛卡尔积)
from pandas import MultiIndex
multi_product=MultiIndex.from_product([['A','B'],
                                    ['A1','A2','B2','B3']],
                                       names=['外层索引','内层索引'])
multi_product


# -----------------------------------下面是输出结果-----------------------------------
MultiIndex([('A', 'A1'),
            ('A', 'A2'),
            ('A', 'B2'),
            ('A', 'B3'),
            ('B', 'A1'),
            ('B', 'A2'),
            ('B', 'B2'),
            ('B', 'B3')],
           names=['外层索引', '内层索引'])

 

import pandas as pd
# 创建一个DataFrame对象
df_product=pd.DataFrame([[1,2,3],[5,2,3],[2,5,6],[7,8,9],[3,6,7],[3,2,4],[4,5,6],[7,3,9]],index=multi_product)
df_product


# --------------------------------------下面是输出结果--------------------------------------
               0  1  2
外层索引 内层索引         
    A    A1    1  2  3
         A2    5  2  3
         B2    2  5  6
         B3    7  8  9
    B    A1    3  6  7
         A2    3  2  4
         B2    4  5  6
         B3    7  3  9

 

根据表格进行层次化索引操作

 

from pandas import Series
# 索引相当于是二维数组,第一列是外层索引(相同的会不显示),第二列相当于是内层索引,data就是数据
book=pd.Series([50,60,40,94,63,101,200,56,45],index=[['小说','小说','小说',
                                                     '散文随笔','散文随笔','散文随笔',
                                                      '传记','传记','传记'],
                                                    ['《平凡的世界》','《骆驼祥子》','《狂人日记》',
                                                    '《皮囊》','《浮生六记》','《自在独行》',
                                                    '《曾国藩》','《老舍自传》','《知行合一王阳明》']])



print(book)
# 获取内层索引对应的子集(内层索引相当于是列名)
book[:,'《自在独行》']


#-----------------------------------下面是输出结果----------------------------------------
小说    《平凡的世界》       50
      《骆驼祥子》        60
      《狂人日记》        40
散文随笔  《皮囊》          94
      《浮生六记》        63
      《自在独行》       101
传记    《曾国藩》        200
      《老舍自传》        56
      《知行合一王阳明》     45
dtype: int64
------------------------------------------------
散文随笔    101
dtype: int64

 

# 交换分层顺序的操作可以用swaplevel()方法来进行
book.swaplevel()


#-----------------------------------下面是输出结果-----------------------------------
《平凡的世界》    小说       50
《骆驼祥子》     小说       60
《狂人日记》     小说       40
《皮囊》       散文随笔     94
《浮生六记》     散文随笔     63
《自在独行》     散文随笔    101
《曾国藩》      传记      200
《老舍自传》     传记       56
《知行合一王阳明》  传记       45
dtype: int64

 

分层排序

#sort_index(axis=0,level=None,ascending=True,inplace=False,kind='quicksort',na_position='last',sort_remaining=True,by=None)

from pandas import DataFrame
# 构造对象并进行实例化操作
data=pd.DataFrame({'word':['a','b','c','d','e','f','g','h','i'],'num':[1,2,3,4,5,6,7,8,9]},
                         index=[['A','A','A','B','B','B','C','C','C'],[1,2,3,3,2,1,2,1,3]])



print(data)
# 进行排序
print(data.sort_index())


#--------------------------------------下面是输出结果----------------------------------------
    word  num
A 1    a    1
  2    b    2
  3    c    3
B 3    d    4
  2    e    5
  1    f    6
C 2    g    7
  1    h    8
  3    i    9
    word  num
A 1    a    1
  2    b    2
  3    c    3
B 1    f    6
  2    e    5
  3    d    4
C 1    h    8
  2    g    7
  3    i    9

按num列进行降序排列,data.sort_index(by=['num'],ascending = False)

标签:层次化,index,MultiIndex,pd,索引,B2,B3
From: https://www.cnblogs.com/yaya000/p/17790738.html

相关文章

  • 41 mysql 索引和慢查询优化
    MySQL之索引原理与慢查询优化 阅读目录一介绍二索引的原理三索引的数据结构四聚集索引与辅助索引五MySQL索引管理六测试索引七正确使用索引八联合索引与覆盖索引九查询优化神器-explain十慢查询优化的基本步骤十一慢日志管理一介绍为何要......
  • 事务,python连接mysql 索引等
    1.python连接MySQLMySQL本身就是一款C/S架构,有服务端、有客户端,自身带了有客户端:mysql.exepython这门语言成为了MySQL的客户端(对于一个服务端来说,客户端可以有很多)"""SQL的由来"""操作步骤:1.先链接MySQLhost、port、username、password、charset、库等......
  • mysql表关联查询-索引失效问题
    问题:两张关联表索引字段的字符集不一致导致索引失效。解决方案:先用EXPLAIN检查关联字段是否使用了索引,查看两张表的字段不一致导致将两张表索引字段的字符集发现字符集不一致,重新将字符集统一为utf8mb4。 ......
  • Ts中string、number和any等类型 不能当做索引用,怎么处理?
    Ts中string、number和any等类型不能当做索引用,怎么处理?肥晨2023-05-181,049阅读1分钟 文章目录导文问题解决方法方法1方法2方法3导文Ts中string、number和any等类型不能当做索引用,怎么处理?报错:元素隐式具有“any”类型,因为类型为“number”的表......
  • VMware Aria Suite 8.14 发布 - 云管理解决方案 (下载索引)
    VMwareAriaSuite8.14-云管理解决方案(下载索引)请访问原文链接:https://sysin.org/blog/vmware-aria-suite/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org云管理套包VMwareAriaSuite(以前称为vRealizeSuite)和vCloudSuiteVMwareAriaSuite(vRealizeSu......
  • 数据库系列:使用高区分度索引列提升性能
    数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更1背景我们常常在创建组合索引的时候,会纠结一个问题,组合索引包含多个索引字段,它的顺序应该怎么放,怎样能达到更大的性能利用。正确的索引字段顺序应该取决于使用该索......
  • MySQL索引
    索引数据结构,典型的空间换时间          非聚集索引,辅助索引                  MySQL多表连接      ......
  • 索引下推
    在age、sex列上建立联合索引1.5.6之前没有索引下推,过程如下存储引擎根据where条件中age索引字段,找到符合条件行主键ID然后二次回表查询,根据主键ID去主键索引上找到整行记录把数据返回给MySQLServer层,再根据where中sex条件,筛选出符合要求的一行记录2.引入索引下推存储引擎根据......
  • MYSQL判断索引是否存在,不存在则创建索引(亲测可用)
    MYSQL判断索引是否存在,不存在则创建索引(亲测可用)springboot集成flyway管理数据库版本使用存储过程平滑更新系统数据库这是一个不存在就添加索引的例子,若需求是存在则删除微调下面的ifnotexists即可DROPPROCEDUREIFEXISTSadd_index;DELIMITER$CREATEPROCEDUREadd_......
  • Chromium源码 修改默认搜索引擎及标签页
    默认新标签页修改方法:1.找到chrome/browser/ui/browser_tabstrip.cc文件找到变量NavigateParamsparams:1NavigateParamsparams(browser,url.is_empty()?browser->GetNewTabURL():url,2ui::PAGE_TRANSITION_TYPED);修改为:1NavigatePara......