Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

WBOY
WBOYke hadapan
2023-05-07 14:55:082848semak imbas

Pengenalan

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

pd.MultiIndex.from_arrays()

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=['姓名', '性别', '年龄'])

pd.MultiIndex.from_tuples()

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)],
           )

Senarai dan tupel boleh dicampur

  • 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=['姓名', '性别', '年龄'] # 指定名字
           )

pd.MultiIndex.from_product()

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

Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

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]:

rreee

Keluar[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

pd.MultiIndex.from_frame()

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'])

Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

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"])

groupby()

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]:

Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

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

Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

Lihat indeks data:

Dalam [28]:

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

Keluar[28]:

df2.index

pivot_table()

diperolehi melalui fungsi pivot:

Dalam [29]:

rreee

Bagaimana untuk membuat indeks berbilang peringkat (MultiIndex) menggunakan perpustakaan panda Python?

Dalam [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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam