2016-11-12 6 views
2

Nach dem Lesen der Dokumentation von Pandas und MultiIndex, viele Beiträge hier, ich verstehe immer noch nicht vollständig das Konzept. Könnte jemand mir helfen, diese eine Codezeile zu finden?Umformung MultiIndex zu trennen

Ich möchte ein Boxplot aus Daten aus einer XLS-Datei erstellen. Der Hinweis wäre, zwei Boxplots zu zeigen, einen für den Parameter = 33 und einen für den Parameter = 77. Also muss mein Datensatz die Ergebnisse nach dem Parameter aufteilen. Alle Versuche, mit Entstapeln irgendwie gescheitert, da ich nicht in vollem Umfang das Konzept erhalten

# -*- coding: utf-8 -*- 
import pandas 
import numpy as np 
wbName= "Test (1).xlsx" 
wsName = "Sheet1" 
sort_by=['Name','Parameter'] 
df = pandas.read_excel(open(wbName, "rb"), sheetname=wsName) 
id_col=list() 
for sb in sort_by: 
    id_col.append(np.where(df.columns.values==sb)[0][0]) 
df = pandas.read_excel(open(wbName, "rb"), sheetname=wsName, index_col=id_col) 
print(df) 
#oneline magic needed 
df.plot.box() 

So sind die print (df) zurückkehrt (wie erwartet)

Name Parameter   
sdf 33    99 
    33    99 
    33    99 
    33   645 
    33   345 
    77   567 
    77    45 
    77   456 
    77   456 
    77   234 
    77   576 
    77    45 
ere 33    99 
    33    99 
    33    99 
    33   645 
    33   345 
    77   567 
    77    45 
    77   456 
    77   456 
    77   234 
    77   576 
    77    45 

aber ich nehme an, dass ich eine Zeile nur brauchen contert in in (Anzahl nicht Macthing oben exaple)

Result    
Parameter  33 77 
Name   
sdf    99 567 
        99 45 
        99 456 
       645 456 
       345 456 
ere    99 546 
        99 465 
        99 456 
       645 46 
+0

Ich habe aktualisiert meinem Beitrag ist. – piRSquared

Antwort

1

Das Problem ist, dass Ihr pd.MultiIndex nicht eindeutig ist.

nehmen Ihre Serie s

df = pd.DataFrame({n: g.reset_index(drop=True) for n, g in s.groupby(level=[0, 1])}) 
df.stack(0).reset_index(0, drop=True).sort_index() 

enter image description here


Setup

import pandas as pd 
from io import StringIO 

txt = """Name Parameter Value  
sdf 33    99 
sdf 33    99 
sdf 33    99 
sdf 33   645 
sdf 33   345 
sdf 77   567 
sdf 77    45 
sdf 77   456 
sdf 77   456 
sdf 77   234 
sdf 77   576 
sdf 77    45 
ere 33    99 
ere 33    99 
ere 33    99 
ere 33   645 
ere 33   345 
ere 77   567 
ere 77    45 
ere 77   456 
ere 77   456 
ere 77   234 
ere 77   576 
ere 77    45""" 

s = pd.read_csv(StringIO(txt), delim_whitespace=True, index_col=[0, 1], squeeze=True)