2017-05-31 5 views
2
に二つの部分に列を変換する

I持って、次のデータフレーム(私は変更することはできませんCSVファイルから読み込み):マルチインデックス

df = pd.DataFrame([['low', 0.5, 123, 0.8, 123], 
        ['high', 0.7, 253, 0.9, 147]], 
        columns=['type', 'g1 v0', 'g1 v1', 'g2 v0', 'g2 v1']) 

Iたいなど、「スプリット」の列g1 v0g1 v1、中にマルチインデックス、例えば以下のような:

    g1   g2 
      v0  v1  v0  v1 
    type  
0 low 0.5 123 0.8 123 
1 high 0.7 253 0.9 147 

は基本的に、私は、列名のgx/vy一部を2つの別々のレベルに置くことにしたいです。

答えて

4

使用set_index + split

df = df.set_index('type') 
df.columns = df.columns.str.split(expand=True) 
print (df) 
     g1  g2  
     v0 v1 v0 v1 
type      
low 0.5 123 0.8 123 
high 0.7 253 0.9 147 

dropsplitconcatのもう一つの解決策:

df1 = df.drop('type', axis=1) 
df1.columns = df1.columns.str.split(expand=True) 
print (df1) 
    g1  g2  
    v0 v1 v0 v1 
0 0.5 123 0.8 123 
1 0.7 253 0.9 147 

df = pd.concat([df['type'].rename(('','type')), df1], axis=1) 
print (df) 
     g1  g2  
    type v0 v1 v0 v1 
0 low 0.5 123 0.8 123 
1 high 0.7 253 0.9 147 
+1

私はこの答えに向上させることはできません! – piRSquared

+0

'set_index' +' split'メソッドはまさに私が探していたものです、ありがとう! – Holt

+0

うれしいことができますよ!がんばろう! – jezrael

関連する問題