2017-06-20 3 views
0

Ich habe eine Tabelle mit drei Spalten: A, B und C. Jede Spalte ist weiter in zwei Unterspalten unterteilt: Name und Regel.Wie extrahiere ich eine Unterspalte aus einem Pandas DataFrame?

Ich muss drei Kreisdiagramme aus dem Name Sub-Spalten mit Matplotlib, aber ich weiß nicht, wie man die Unterspalte extrahieren. Dies ist, was ich versucht, aber es hat nicht funktioniert:

chart = df['A'['Name']].value_counts().plot(kind='pie', labels=labels, autopct='%1.1f%%') 

Antwort

3

Sie könnten auf Multiindexing und Slicing lesen möchten.

import pandas as pd 
import numpy as np 

arrays = [['A', 'A', 'B', 'B', 'C', 'C'], 
      ['Name', 'Rule', 'Name', 'Rule', 'Name', 'Rule']] 
tuples = list(zip(*arrays)) 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 
df = pd.DataFrame(np.random.rand(3, 6)*10, columns=index) 

#creates this dataframe: 
#first   A     B     C   
#second  Name  Rule  Name  Rule  Name  Rule 
#0  2.075001 4.702192 3.480122 1.785579 5.078655 9.053004 
#1  7.313122 3.762273 7.423559 8.713660 9.107358 5.643705 
#2  8.981356 9.748874 1.131691 1.487273 0.096690 6.175825 

# then index it with a none slice for the first column index and `"Name"` for the second. 

df.loc[:,(slice(None), 'Name')].plot(kind='pie', subplots=True, autopct='%1.1f%%') 

enter image description here

+0

Dank für die Lösung. Ich habe versucht, es zu implementieren, aber einen Fehler bekommen "'MultiIndex Slicing erfordert den Index vollständig lexsortiert Tupel len (2), Lexsort Tiefe (1)'". Weißt du, worauf sich dieser Fehler beziehen kann? Ich habe Strings in dieser Tabelle im Gegensatz zu Zahlen, die Sie mit np.random importiert haben. – Nata

+0

Ich denke, Sie werden verstehen, dass es nahezu unmöglich ist, das Problem zu kennen, das Sie haben, ohne den Code zu kennen. – ImportanceOfBeingErnest

+0

Entschuldigung, das ist mein Code. Es gibt einige zusätzliche Spalten in der Tabelle (Name2, Rule2), aber ich brauche sie nicht zum Plotten. 'arrays = [['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', ' C ',' C ', [Name, Regel, Name2, Regel2, Name, Regel, Name2, Regel2, Name, Regel , 'Name2','Rule2 ']] tuples = Liste (zip (* arrays)) index = pd.MultiIndex.from_tuples (Tupel, Namen = [' first ',' second ']) df_new = pd. DataFrame (df, columns = index) df_new.loc [:, (slice (Keine), 'Name')]. Plot (art = 'pie', subplots = True, labels = labels, autopct = '% 1.1f %% ') ' – Nata

Verwandte Themen