大蟒蛇python教程共享python pandas创建多层索引MultiIndex的6种方式

引言

在上一篇文章中介绍了如何创建pandas中的单层索引,今天给大家带来的是如何创建pandas中的多层索引。

pd.multiindex,即具有多个层次的索引。通过多层次索引,我们就可以操作整个索引组的数据。python教程分享python pandas创建多层索引MultiIndex的6种方式主要介绍在pandas中创建多层索引的6种方式:

  • pd.multiindex.from_arrays():多维数组作为参数,高维指定高层索引,低维指定低层索引。
  • pd.multiindex.from_tuples():元组的列表作为参数,每个元组指定每个索引(高维和低维索引)。
  • pd.multiindex.from_product():一个可迭代对象的列表作为参数,根据多个可迭代对象元素的笛卡尔积(元素间的两两组合)进行创建索引。
  • pd.multiindex.from_frame:根据现有的数据框来直接生成
  • groupby():通过数据分组统计得到
  • pivot_table():生成透视表的方式来得到

python pandas创建多层索引MultiIndex的6种方式

pd.multiindex.from_arrays()

in [1]:

import pandas as pd  import numpy as np  

通过数组的方式来生成,通常指定的是列表中的元素:

in [2]:

# 列表元素是字符串和数字  array1 = [["xiaoming","guanyu","zhangfei"],             [22,25,27]           ]  m1 = pd.multiindex.from_arrays(array1)  m1  

out[2]:

multiindex([('xiaoming', 22),            (  'guanyu', 25),            ('zhangfei', 27)],             )  

in [3]:

type(m1)  # 查看数据类型  

通过type函数来查看数据类型,发现的确是:multiindex

out[3]:

pandas.core.indexes.multi.multiindex  

在创建的同时可以指定每个层级的免费精选名字大全:

in [4]:

# 列表元素全是字符串  array2 = [["xiaoming","guanyu","zhangfei"],            ["male","male","female"]           ]  m2 = pd.multiindex.from_arrays(  	array2,     # 指定姓名和性别    names=["name","sex"])  m2  

out[4]:

multiindex([('xiaoming',   'male'),            (  'guanyu',   'male'),            ('zhangfei', 'female')],             names=['name', 'sex'])  

下面的例子是生成3个层次的索引且指定免费精选名字大全:

in [5]:

array3 = [["xiaoming","guanyu","zhangfei"],            ["male","male","female"],            [22,25,27]           ]  m3 = pd.multiindex.from_arrays(  	array3,   	names=["姓名","性别","年龄"])  m3  

out[5]:

multiindex([('xiaoming',   'male', 22),            (  'guanyu',   'male', 25),            ('zhangfei', 'female', 27)],             names=['姓名', '性别', '年龄'])  

pd.multiindex.from_tuples()

通过元组的形式来生成多层索引:

in [6]:

# 元组的形式  array4 = (("xiaoming","guanyu","zhangfei"),             (22,25,27)           )  m4 = pd.multiindex.from_arrays(array4)  m4  

out[6]:

multiindex([('xiaoming', 22),            (  'guanyu', 25),            ('zhangfei', 27)],             )  

in [7]:

# 元组构成的3层索引  array5 = (("xiaoming","guanyu","zhangfei"),            ("male","male","female"),            (22,25,27))  m5 = pd.multiindex.from_arrays(array5)  m5  

out[7]:

multiindex([('xiaoming',   'male', 22),            (  'guanyu',   'male', 25),            ('zhangfei', 'female', 27)],             )  

列表和元组是可以混合使用的

  • 最外层是列表
  • 里面全部是元组

in [8]:

array6 = [("xiaoming","guanyu","zhangfei"),            ("male","male","female"),            (18,35,27)           ]  # 指定免费精选名字大全  m6 = pd.multiindex.from_arrays(array6,names=["姓名","性别","年龄"])  m6  

out[8]:

multiindex([('xiaoming',   'male', 18),            (  'guanyu',   'male', 35),            ('zhangfei', 'female', 27)],             names=['姓名', '性别', '年龄'] # 指定免费精选名字大全             )  

pd.multiindex.from_product()

使用可迭代对象的列表作为参数,根据多个可迭代对象元素的笛卡尔积(元素间的两两组合)进行创建索引。

在python中,我们使用 isinstance()函数 判断python对象是否可迭代:

# 导入 collections 模块的 iterable 对比对象  from collections import iterable  

python pandas创建多层索引MultiIndex的6种方式

python pandas创建多层索引MultiIndex的6种方式

通过上面的例子我们总结:常见的字符串、列表、集合、元组、字典都是可迭代对象

下面举例子来说明:

in [18]:

names = ["xiaoming","guanyu","zhangfei"]  numbers = [22,25]  m7 = pd.multiindex.from_product(      [names, numbers],       names=["name","number"]) # 指定免费精选名字大全  m7  

out[18]:

multiindex([('xiaoming', 22),            ('xiaoming', 25),            (  'guanyu', 22),            (  'guanyu', 25),            ('zhangfei', 22),            ('zhangfei', 25)],             names=['name', 'number'])  

in [19]:

# 需要展开成列表形式  strings = list("abc")   lists = [1,2]  m8 = pd.multiindex.from_product(  	[strings, lists],  	names=["alpha","number"])  m8  

out[19]:

multiindex([('a', 1),            ('a', 2),            ('b', 1),            ('b', 2),            ('c', 1),            ('c', 2)],             names=['alpha', 'number'])  

in [20]:

# 使用元组形式  strings = ("a","b","c")   lists = [1,2]  m9 = pd.multiindex.from_product(  	[strings, lists],  	names=["alpha","number"])  m9  

out[20]:

multiindex([('a', 1),            ('a', 2),            ('b', 1),            ('b', 2),            ('c', 1),            ('c', 2)],             names=['alpha', 'number'])  

in [21]:

# 使用range函数  strings = ("a","b","c")  # 3个元素  lists = range(3)  # 0,1,2  3个元素  m10 = pd.multiindex.from_product(  	[strings, lists],  	names=["alpha","number"])  m10  

out[21]:

multiindex([('a', 0),            ('a', 1),            ('a', 2),            ('b', 0),            ('b', 1),            ('b', 2),            ('c', 0),            ('c', 1),            ('c', 2)],             names=['alpha', 'number'])  

in [22]:

# 使用range函数  strings = ("a","b","c")   list1 = range(3)  # 0,1,2  list2 = ["x","y"]  m11 = pd.multiindex.from_product(  	[strings, list1, list2],    names=["name","l1","l2"]    )  m11  # 总个数 3*3*2=18  

总个数是“332=18`个:

out[22]:

multiindex([('a', 0, 'x'),            ('a', 0, 'y'),            ('a', 1, 'x'),            ('a', 1, 'y'),            ('a', 2, 'x'),            ('a', 2, 'y'),            ('b', 0, 'x'),            ('b', 0, 'y'),            ('b', 1, 'x'),            ('b', 1, 'y'),            ('b', 2, 'x'),            ('b', 2, 'y'),            ('c', 0, 'x'),            ('c', 0, 'y'),            ('c', 1, 'x'),            ('c', 1, 'y'),            ('c', 2, 'x'),            ('c', 2, 'y')],             names=['name', 'l1', 'l2'])  

pd.multiindex.from_frame()

通过现有的dataframe直接来生成多层索引:

df = pd.dataframe({"name":["xiaoming","guanyu","zhaoyun"],                    "age":[23,39,34],                    "sex":["male","male","female"]})  df  

python pandas创建多层索引MultiIndex的6种方式

直接生成了多层索引,免费精选名字大全就是现有数据框的列字段:

in [24]:

pd.multiindex.from_frame(df)  

out[24]:

multiindex([('xiaoming', 23,   'male'),            (  'guanyu', 39,   'male'),            ( 'zhaoyun', 34, 'female')],             names=['name', 'age', 'sex'])  

通过names参数来指定免费精选名字大全:

in [25]:

# 可以自定义免费精选名字大全  pd.multiindex.from_frame(df,names=["col1","col2","col3"])  

out[25]:

multiindex([('xiaoming', 23,   'male'),            (  'guanyu', 39,   'male'),            ( 'zhaoyun', 34, 'female')],             names=['col1', 'col2', 'col3'])  

groupby()

通过groupby函数的分组功能计算得到:

in [26]:

df1 = pd.dataframe({"col1":list("ababbc"),                     "col2":list("xxyyzz"),                     "number1":range(90,96),                     "number2":range(100,106)})  df1  

out[26]:

python pandas创建多层索引MultiIndex的6种方式

df2 = df1.groupby(["col1","col2"]).agg({"number1":sum,                                          "number2":np.mean})  df2  

python pandas创建多层索引MultiIndex的6种方式

查看数据的索引:

in [28]:

df2.index  

out[28]:

multiindex([('a', 'x'),            ('a', 'y'),            ('b', 'x'),            ('b', 'y'),            ('b', 'z'),            ('c', 'z')],             names=['col1', 'col2'])  

pivot_table()

通过数据透视功能得到:

in [29]:

df3 = df1.pivot_table(values=["col1","col2"],index=["col1","col2"])  df3  

python pandas创建多层索引MultiIndex的6种方式

in [30]:

df3.index  

out[30]:

multiindex([('a', 'x'),            ('a', 'y'),            ('b', 'x'),            ('b', 'y'),            ('b', 'z'),            ('c', 'z')],             names=['col1', 'col2'])

以上就是python pandas创建多层索引multiindex的6种方式的详细内容,更多关于python pandas多层索引multiindex的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

需要了解更多python教程分享python pandas创建多层索引MultiIndex的6种方式,都可以关注python教程分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/pythontutorial/1187782.html

(0)
上一篇 2022年8月4日
下一篇 2022年8月4日

精彩推荐