Maison  >  Article  >  développement back-end  >  Comment créer un index multi-niveaux (MultiIndex) à l'aide de la bibliothèque pandas de Python ?

Comment créer un index multi-niveaux (MultiIndex) à l'aide de la bibliothèque pandas de Python ?

WBOY
WBOYavant
2023-05-07 14:55:082710parcourir

Introduction

pd.MultiIndex, un index à plusieurs niveaux. Grâce à des index multi-niveaux, nous pouvons exploiter les données de l'ensemble du groupe d'index. Cet article présente principalement 6 façons de créer des index multi-niveaux dans Pandas :

  • pd.MultiIndex.from_arrays() : les tableaux multidimensionnels sont utilisés comme paramètres, la haute dimensionnalité spécifie les index de haut niveau et la faible dimensionnalité spécifie index de bas niveau.

  • pd.MultiIndex.from_tuples() : Liste de tuples en argument, chaque tuple spécifiant chaque index (index de dimension haute et basse).

  • pd.MultiIndex.from_product() : une liste d'objets itérables est utilisée comme paramètre et l'index est créé sur la base du produit cartésien (combinaison par paire d'éléments) de plusieurs éléments d'objet itérables.

  • pd.MultiIndex.from_frame : généré directement à partir du bloc de données existant

  • groupby() : obtenu grâce aux statistiques de regroupement de données

  • pivot_table() : généré en générant un tableau croisé dynamique

pd .MultiIndex.from_arrays()

In [1]:

import pandas as pd
import numpy as np

est généré via un tableau, spécifiant généralement les éléments de la liste :

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)  # 查看数据类型

Affichez le type de données via la fonction type et constatez qu'il s'agit bien de : MultiIndex

Out[3]:

pandas.core.indexes.multi.MultiIndex

Vous pouvez spécifier le nom de chaque niveau lors de la création :

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

L'exemple suivant génère trois niveaux d'index et spécifie des noms :

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 ()

Générez des index multi-niveaux sous forme de 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)],
           )

list et les tuples peuvent être mixte

  • La couche la plus externe est une liste

  • Tous les intérieurs sont des tuples

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()

prend un. liste d'objets itérables en tant que paramètres et crée un index basé sur le produit cartésien (combinaison par paire d'éléments) de plusieurs éléments d'objet itérables.

En Python, nous utilisons la fonction isinstance() pour déterminer si un objet python est itérable :

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

Comment créer un index multi-niveaux (MultiIndex) à laide de la bibliothèque pandas de Python ?

Comment créer un index multi-niveaux (MultiIndex) à laide de la bibliothèque pandas de Python ?

À travers l'exemple ci-dessus, nous résumons : les chaînes, listes, ensembles, tuples et dictionnaires courants sont tous itérables Objet

Ce qui suit est un exemple pour illustrer :

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

Le nombre total est ``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()

Générez directement un index multi-niveaux via le DataFrame existant :

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

Comment créer un index multi-niveaux (MultiIndex) à laide de la bibliothèque pandas de Python ?

génèrez directement un index multi-niveaux, le nom est le champ de colonne de l'existant trame de données :

In [24]:

pd.MultiIndex.from_frame(df)

Out[24]:

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

Spécifiez le nom via le paramètre noms :

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()

via la fonction groupby La fonction de regroupement est calculée comme suit :

In [26]:

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

Out[26]:

Comment créer un index multi-niveaux (MultiIndex) à laide de la bibliothèque pandas de Python ?

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

Comment créer un index multi-niveaux (MultiIndex) à laide de la bibliothèque pandas de Python ?

Voir l'index des données :

In [28] :

df2.index

Out[28] :

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

pivot_table()

est obtenu grâce à la fonction pivot :

In [29]:

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

Comment créer un index multi-niveaux (MultiIndex) à laide de la bibliothèque pandas de Python ?

In [30]:

df3.index

Out[30] :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer