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

WBOY
Lepaskan: 2023-05-07 14:55:08
ke hadapan
2805 orang telah melayarinya

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
Salin selepas log masuk

dijana melalui tatasusunan, biasanya menyatakan elemen dalam senarai:

Dalam [2]:

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

Keluar[2]:

MultiIndex([('xiaoming', 22),            (  'guanyu', 25),            ('zhangfei', 27)],
           )
Salin selepas log masuk
Salin selepas log masuk

Dalam [3]:

type(m1)  # 查看数据类型
Salin selepas log masuk

menggunakan fungsi jenis untuk menyemak jenis data dan mendapati ia sememangnya: MultiIndex

Keluar[3]:

pandas.core.indexes.multi.MultiIndex
Salin selepas log masuk

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
Salin selepas log masuk

Keluar[4]:

MultiIndex([('xiaoming',   'male'),            (  'guanyu',   'male'),            ('zhangfei', 'female')],
           names=['name', 'sex'])
Salin selepas log masuk

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
Salin selepas log masuk

Keluar[5]:

MultiIndex([('xiaoming',   'male', 22),            (  'guanyu',   'male', 25),            ('zhangfei', 'female', 27)],
           names=['姓名', '性别', '年龄'])
Salin selepas log masuk

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
Salin selepas log masuk

Keluar[6]:

MultiIndex([('xiaoming', 22),            (  'guanyu', 25),            ('zhangfei', 27)],
           )
Salin selepas log masuk
Salin selepas log masuk

Dalam [7]:

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

Keluar [7]:

MultiIndex([('xiaoming',   'male', 22),            (  'guanyu',   'male', 25),            ('zhangfei', 'female', 27)],
           )
Salin selepas log masuk

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
Salin selepas log masuk

Keluar[8]:

MultiIndex([('xiaoming',   'male', 18),            (  'guanyu',   'male', 35),            ('zhangfei', 'female', 27)],
           names=['姓名', '性别', '年龄'] # 指定名字
           )
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

Keluar[18]:

MultiIndex([('xiaoming', 22),            ('xiaoming', 25),            (  'guanyu', 22),            (  'guanyu', 25),            ('zhangfei', 22),            ('zhangfei', 25)],
           names=['name', 'number'])
Salin selepas log masuk

Dalam [19]:

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

Keluar[19]:

MultiIndex([('a', 1),            ('a', 2),            ('b', 1),            ('b', 2),            ('c', 1),            ('c', 2)],
           names=['alpha', 'number'])
Salin selepas log masuk
Salin selepas log masuk

Dalam [20]:

rreee

Keluar[20]:

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

Dalam [21]:

MultiIndex([('a', 1),            ('a', 2),            ('b', 1),            ('b', 2),            ('c', 1),            ('c', 2)],
           names=['alpha', 'number'])
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk

Dalam [22]:

MultiIndex([('a', 0),            ('a', 1),            ('a', 2),            ('b', 0),            ('b', 1),            ('b', 2),            ('c', 0),            ('c', 1),            ('c', 2)],
           names=['alpha', 'number'])
Salin selepas log masuk

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
Salin selepas log masuk

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'])
Salin selepas log masuk

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
Salin selepas log masuk

Keluar[24]:

pd.MultiIndex.from_frame(df)
Salin selepas log masuk

Nyatakan nama melalui parameter nama:

Dalam [25]:

MultiIndex([('xiaoming', 23,   'male'),            (  'guanyu', 39,   'male'),            ( 'zhaoyun', 34, 'female')],
           names=['name', 'age', 'sex'])
Salin selepas log masuk

Keluar[ 25]:

# 可以自定义名字
pd.MultiIndex.from_frame(df,names=["col1","col2","col3"])
Salin selepas log masuk

groupby()

dikira melalui fungsi berkumpulan bagi fungsi groupby:

Dalam [26]:

MultiIndex([('xiaoming', 23,   'male'),            (  'guanyu', 39,   'male'),            ( 'zhaoyun', 34, 'female')],
           names=['col1', 'col2', 'col3'])
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

Keluar[28]:

df2.index
Salin selepas log masuk

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'])
Salin selepas log masuk

Keluar[30]:

df3 = df1.pivot_table(values=["col1","col2"],index=["col1","col2"])
df3
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan