2016-11-12 9 views
2

pandasとMultiIndexのドキュメントを読んだところ、ここには多くの記事がありますが、私はまだその概念を完全には把握していません。この1行のコードを見つけるのに役立つ人もいます。MultiIndexを分割して再構成する

xlsファイルのデータからボックスプロットを作成したいとします。この手掛かりは、2つのボックスプロットを表示することです.1つはパラメータ= 33、もう1つはパラメータ= 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)リターンを得ることはありませんとして失敗しましたが、私はちょうど1つの行を必要とすることを前提としていcontert(exaple上macthingない数)

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が一意ではないということです。

は、あなたのシリーズは、私は私のポストを更新しました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) 
関連する問題