Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?
pd.MultiIndex, indeks dengan pelbagai peringkat. Melalui indeks berbilang peringkat, kami boleh mengendalikan data keseluruhan kumpulan indeks. Artikel ini terutamanya memperkenalkan 6 cara untuk mencipta indeks berbilang peringkat dalam Panda:
pd.MultiIndex.from_arrays(): Tatasusunan berbilang dimensi digunakan sebagai parameter, dimensi tinggi menentukan tahap tinggi indeks, dan dimensi rendah menentukan indeks peringkat rendah.
pd.MultiIndex.from_tuples(): Senarai tupel sebagai hujah, setiap tupel menyatakan setiap indeks (indeks dimensi tinggi dan rendah).
pd.MultiIndex.from_product(): Senarai objek boleh lelar sebagai parameter, dibuat berdasarkan hasil Cartesian (gabungan unsur berpasangan) bagi indeks unsur objek boleh lelar berbilang.
pd.MultiIndex.from_frame: dijana secara langsung berdasarkan bingkai data sedia ada
groupby(): diperoleh melalui statistik pengumpulan data
pivot_table(): Satu cara untuk menjana jadual pangsi untuk mendapatkan
Dalam [1 ] :
import pandas as pd import numpy as np
dijana melalui tatasusunan, biasanya menyatakan elemen dalam senarai:
Dalam [2]:
# 列表元素是字符串和数字 array1 = [["xiaoming","guanyu","zhangfei"], [22,25,27] ] m1 = pd.MultiIndex.from_arrays(array1) m1
Keluar[2]:
MultiIndex([('xiaoming', 22), ( 'guanyu', 25), ('zhangfei', 27)], )
Dalam [3]:
type(m1) # 查看数据类型
menggunakan fungsi jenis untuk menyemak jenis data dan mendapati ia sememangnya: MultiIndex
Keluar[3]:
pandas.core.indexes.multi.MultiIndex
dicipta dalam Pada masa yang sama, anda boleh menentukan nama setiap peringkat:
Dalam [4]:
# 列表元素全是字符串 array2 = [["xiaoming","guanyu","zhangfei"], ["male","male","female"] ] m2 = pd.MultiIndex.from_arrays( array2, # 指定姓名和性别 names=["name","sex"]) m2
Keluar[4]:
MultiIndex([('xiaoming', 'male'), ( 'guanyu', 'male'), ('zhangfei', 'female')], names=['name', 'sex'])
Contoh berikut menjana indeks 3 tahap dan Nyatakan nama:
Dalam [5]:
array3 = [["xiaoming","guanyu","zhangfei"], ["male","male","female"], [22,25,27] ] m3 = pd.MultiIndex.from_arrays( array3, names=["姓名","性别","年龄"]) m3
Keluar[5]:
MultiIndex([('xiaoming', 'male', 22), ( 'guanyu', 'male', 25), ('zhangfei', 'female', 27)], names=['姓名', '性别', '年龄'])
Dengan tuple Untuk menjana indeks berbilang peringkat dalam bentuk:
Dalam [6]:
# 元组的形式 array4 = (("xiaoming","guanyu","zhangfei"), (22,25,27) ) m4 = pd.MultiIndex.from_arrays(array4) m4
Keluar[6]:
MultiIndex([('xiaoming', 22), ( 'guanyu', 25), ('zhangfei', 27)], )
Dalam [7]:
# 元组构成的3层索引 array5 = (("xiaoming","guanyu","zhangfei"), ("male","male","female"), (22,25,27)) m5 = pd.MultiIndex.from_arrays(array5) m5
Keluar [7]:
MultiIndex([('xiaoming', 'male', 22), ( 'guanyu', 'male', 25), ('zhangfei', 'female', 27)], )
Lapisan paling luar ialah senarai
Semua adalah tupel
Dalam [8]:
array6 = [("xiaoming","guanyu","zhangfei"), ("male","male","female"), (18,35,27) ] # 指定名字 m6 = pd.MultiIndex.from_arrays(array6,names=["姓名","性别","年龄"]) m6
Keluar[8]:
MultiIndex([('xiaoming', 'male', 18), ( 'guanyu', 'male', 35), ('zhangfei', 'female', 27)], names=['姓名', '性别', '年龄'] # 指定名字 )
Gunakan senarai objek boleh lelar sebagai parameter untuk mencipta indeks berdasarkan produk Cartesian (gabungan unsur berpasangan) bagi berbilang elemen objek boleh lelar.
Dalam Python, kami menggunakan fungsi isinstance()
untuk menentukan sama ada objek python boleh lelar:
# 导入 collections 模块的 Iterable 对比对象 from collections import Iterable
Melalui perkara di atas Kami meringkaskan contoh: Rentetan biasa, senarai, set, tupel dan kamus adalah semua objek boleh lelar
Contoh berikut diberikan untuk menggambarkan:
Dalam [18]:
names = ["xiaoming","guanyu","zhangfei"] numbers = [22,25] m7 = pd.MultiIndex.from_product( [names, numbers], names=["name","number"]) # 指定名字 m7
Keluar[18]:
MultiIndex([('xiaoming', 22), ('xiaoming', 25), ( 'guanyu', 22), ( 'guanyu', 25), ('zhangfei', 22), ('zhangfei', 25)], names=['name', 'number'])
Dalam [19]:
# 需要展开成列表形式 strings = list("abc") lists = [1,2] m8 = pd.MultiIndex.from_product( [strings, lists], names=["alpha","number"]) m8
Keluar[19]:
MultiIndex([('a', 1), ('a', 2), ('b', 1), ('b', 2), ('c', 1), ('c', 2)], names=['alpha', 'number'])
Dalam [20]:
rreeeKeluar[20]:
# 使用元组形式 strings = ("a","b","c") lists = [1,2] m9 = pd.MultiIndex.from_product( [strings, lists], names=["alpha","number"]) m9
Dalam [21]:
MultiIndex([('a', 1), ('a', 2), ('b', 1), ('b', 2), ('c', 1), ('c', 2)], names=['alpha', 'number'])
Keluar[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
Dalam [22]:
MultiIndex([('a', 0), ('a', 1), ('a', 2), ('b', 0), ('b', 1), ('b', 2), ('c', 0), ('c', 1), ('c', 2)], names=['alpha', 'number'])
Jumlah Nombornya ialah ``332=18`:
Keluar[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
dijana terus daripada DataFrame sedia ada Indeks berbilang peringkat:
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'])
secara langsung menjana indeks berbilang peringkat, dan namanya ialah medan lajur bagi bingkai data sedia ada:
Dalam [ 24]:
df = pd.DataFrame({"name":["xiaoming","guanyu","zhaoyun"], "age":[23,39,34], "sex":["male","male","female"]}) df
Keluar[24]:
pd.MultiIndex.from_frame(df)
Nyatakan nama melalui parameter nama:
Dalam [25]:
MultiIndex([('xiaoming', 23, 'male'), ( 'guanyu', 39, 'male'), ( 'zhaoyun', 34, 'female')], names=['name', 'age', 'sex'])
Keluar[ 25]:
# 可以自定义名字 pd.MultiIndex.from_frame(df,names=["col1","col2","col3"])
dikira melalui fungsi berkumpulan bagi fungsi groupby:
Dalam [26]:
MultiIndex([('xiaoming', 23, 'male'), ( 'guanyu', 39, 'male'), ( 'zhaoyun', 34, 'female')], names=['col1', 'col2', 'col3'])
Keluar[ 26]:
df1 = pd.DataFrame({"col1":list("ababbc"), "col2":list("xxyyzz"), "number1":range(90,96), "number2":range(100,106)}) df1
Lihat indeks data:
Dalam [28]:
df2 = df1.groupby(["col1","col2"]).agg({"number1":sum, "number2":np.mean}) df2
Keluar[28]:
df2.index
diperolehi melalui fungsi pivot:
Dalam [29]:
rreeeDalam [30 ]:
MultiIndex([('a', 'x'), ('a', 'y'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'z')], names=['col1', 'col2'])
Keluar[30]:
df3 = df1.pivot_table(values=["col1","col2"],index=["col1","col2"]) df3
Atas ialah kandungan terperinci Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!