2016-11-12 3 views
2

여기 팬더와 멀티 인덱스의 문서를 읽은 후에도 개념을 완전히 파악하지 못했습니다. 어떤 사람이이 한 줄의 코드를 찾도록 도와 줄 수 있습니까?MultiIndex를 분리하여 모양 바꾸기

xls 파일의 데이터에서 상자 그림을 만들고 싶습니다. 단서는 두 개의 상자 그림을 표시하는 것입니다. 하나는 매개 변수 = 33이고 다른 하나는 매개 변수 = 77입니다. 그래서 내 데이터 집합은 결과를 매개 변수로 나누어야합니다. 언 스택이있는 모든 시도는 어떻게 든 (예상대로) 나는 완전히

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 

을 개념

# -*- 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() 
그래서

인쇄 (DF) 반환하지 않는 한 실패했지만 난 그냥 하나의 라인이 필요하다고 가정

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

내 게시물을 업데이트했습니다. – piRSquared

답변

1

문제는 pd.MultiIndex 고유되지 않는 것입니다 (수 exaple 위 macthing되지 않음)으로의 contert.

은 시리즈 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


설정 가정

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)