Maison > développement back-end > Tutoriel Python > Comment sélectionner efficacement des lignes dans les DataFrames MultiIndex Pandas ?

Comment sélectionner efficacement des lignes dans les DataFrames MultiIndex Pandas ?

Susan Sarandon
Libérer: 2024-12-12 19:01:16
original
270 Les gens l'ont consulté

How to Efficiently Select Rows in Pandas MultiIndex DataFrames?

Sélectionner des lignes dans un DataFrame Pandas MultiIndex

Résumé du problème

Étant donné un DataFrame Pandas avec un MultiIndex, comment pouvons-nous sélectionner des lignes en fonction de valeurs spécifiques/ étiquettes dans chaque niveau d'index ?

Découper avec loc

df.loc[key, :]
Copier après la connexion
  • key est un tuple d'étiquettes, une pour chaque niveau d'index.
  • Cela fournit un moyen pratique et concis de sélectionner des lignes en fonction de valeurs spécifiques dans différents niveaux.

Le découpage avec xs

df.xs(level_key, level=level_name, drop_level=True/False)
Copier après la connexion
  • level_key est la clé pour le niveau d'index spécifique.
  • drop_level contrôle si le niveau doit être supprimé du DataFrame résultant.
  • xs est particulièrement utile lors du découpage sur un seul niveau.

Filtrage avec requête

df.query("condition")
Copier après la connexion
  • condition est une expression booléenne qui spécifie le filtrage critères.
  • Prend en charge le filtrage flexible sur plusieurs niveaux d'index.

Utilisation de get_level_values

mask = df.index.get_level_values(level_name).isin(values_list)
selected_rows = df[mask]
Copier après la connexion
  • Crée un masque booléen basé sur les valeurs d'un élément spécifique. niveau d'index.
  • Utile pour les opérations de filtrage plus complexes ou lors du découpage sur plusieurs valeurs.

Exemples

Exemple 1 : Sélection de lignes avec des valeurs spécifiques aux niveaux « un » et « deux » :

# Using loc
selected_rows = df.loc[['a'], ['t', 'u']]

# Using xs
selected_rows = df.xs('a', level='one', drop_level=False)
selected_rows = selected_rows.xs(['t', 'u'], level='two')

# Using query
selected_rows = df.query("one == 'a' and two.isin(['t', 'u'])")

# Using get_level_values
one_mask = df.index.get_level_values('one') == 'a'
two_mask = df.index.get_level_values('two').isin(['t', 'u'])
selected_rows = df[one_mask & two_mask]
Copier après la connexion

Exemple 2 : Filtrage des lignes en fonction d'une inégalité numérique de niveau « deux » :

# Using query
selected_rows = df.query("two > 5")

# Using get_level_values
two_mask = df.index.get_level_values('two') > 5
selected_rows = df[two_mask]
Copier après la connexion

Conseils et considérations

  • Considérez la complexité de l'opération de découpage/filtrage et choisissez la méthode appropriée en conséquence.
  • Pour un découpage simple sur un ou plusieurs niveaux, loc ou xs sont préférés.
  • Pour un filtrage complexe ou pour découper plusieurs valeurs, envisagez d'utiliser query ou get_level_values ​​car ils offrent plus de flexibilité.
  • Faites attention à l'utilisation de pd.IndexSlice pour spécifier des opérations de découpage complexes avec loc.
  • sort_index() peut améliorer les performances pour les grands DataFrames avec des MultiIndex non triés.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal