引言
在上一篇文章中介绍了如何创建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():生成透视表的方式来得到
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
通过上面的例子我们总结:常见的字符串、列表、集合、元组、字典都是可迭代对象
下面举例子来说明:
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
直接生成了多层索引,免费精选名字大全就是现有数据框的列字段:
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]:
df2 = df1.groupby(["col1","col2"]).agg({"number1":sum, "number2":np.mean}) df2
查看数据的索引:
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
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