2017-10-16 5 views
0

Disons que j'ai un ensemble de colonnes et que je veux les regrouper uniquement à des fins d'indexation. Par exemple, j'ai l'élément de données df avec 26 colonnes appelées de ["A",...,"Z"] et ses lignes sont l'occurrence de la lettre dans un document. Maintenant, je voudrais diviser l'espace de données entre "Vowels" et "Consonants" d'une manière que je pourrais obtenir le dataframe avec seulement des voyelles avec quelque chose comme df["Vowels"] ou df[["Vowels"]]. À savoir, existe-t-il une approche multi-index pour ce problème ou tout autre outil pandas? Je sais qu'une solution simple serait de définir Vowels=["a",..."y"] et puis faire df[Vowels], mais je voudrais utiliser des fonctionnalités pandas si disponible.Comment grouper des colonnes dans des pandas dans des catégories données?

Un autre exemple est une série temporelle de la température de différents capteurs dans différentes villes et j'aimerais obtenir une table qui ressemble à ceci: enter image description here Alors que, dans mon analyse, je peux juste ne df[['City 1]].plot() et je peux naviguer rapidement dans mes données.

Répondre

2

Oui, Pandas a un système robuste pour MultiIndexing. Une façon de faire ce que vous voulez est la suivante:

vowels = ['A','E','I','O','U','Y'] 
tuples = [('Vowel' if x in vowels else 'Consonant', x) for x in df.columns.tolist()] 
df.columns = pd.MultiIndex.from_tuples(tuples, names=['Kind', 'Letter']) 

Tout d'abord vous faire une liste des voyelles (vous devrez peut-être inclure des lettres avec des accents, des signes diacritiques, etc., en fonction de votre cas d'utilisation). Ensuite, vous faites une liste de tuples où la première valeur est 'Vowel' ou 'Consonant' et la deuxième valeur est la lettre pour chaque lettre dans votre liste de colonnes. Ensuite, vous faites un MultiIndex sur ces tuples.