2016-04-01 4 views
2

私のデータフレームの列をグループにまとめたいと思います。一般的に、私が分析をしているときには、識別子変数、独立変数、従属変数などがあるかもしれません。そして、共通の見出しの下にそのようなすべての変数をまとめるのが組織的にはいいと思います。ここでDataFrame列をMultiIndexに編成する

は、例えば、これは正確に動作しません

import string 
import pandas as pd 

df = pd.DataFrame({"a": list(string.ascii_lowercase[:5]), 
       "b" : np.arange(0,5), 
       "c":list(string.ascii_uppercase[:5]), 
       "d" : np.arange(5,10)}) 
index1 = pd.MultiIndex.from_product([["Letter"], ["a","c"]]) 
index2 = pd.MultiIndex.from_product([["Number"], ["b", "d"]]) 
index = index1.union(index2) 
df.columns = index 

です。

Letter Number 
    a c b d 
0 a 0 A 5 
1 b 1 B 6 
2 c 2 C 7 
3 d 3 D 8 
4 e 4 E 9 

代わりに、私は、インデックスを変更する前に、彼らが第2のレベルのマルチインデックスと整列するように列を並べ替えること

df = df[index.get_level_values(1)] 
    df.columns = index 

を追加する必要があります。これはちょっとした気がして、私はちょうどこれを行うより良い方法があるのだろうかと思っていた。ここ

+0

'用のDF =のDF [index.get_level_values(1 )] '盗まれたようですか? –

+0

私は盗聴について知りません...おそらく不必要かもしれません。私は列をグループ化して複数のインデックスを追加するためのクリーンな構文を探しています。 「 '' pd.MultiIndex.from_product'''でもぎこちないようだ。列のグループごとに複数のインデックスを作成する必要があります。私はちょうど各パーティションの列とキーのパーティションを指定し、階層的なデータフレームを取得したい。 – Ben

答えて

0

良い解決策である。

import string 
import pandas as pd 

df = pd.DataFrame({"a": list(string.ascii_lowercase[:5]), 
       "b" : np.arange(0,5), 
       "c":list(string.ascii_uppercase[:5]), 
       "d" : np.arange(5,10)}) 
index1 = pd.MultiIndex.from_product([["Letter"], ["a","c"]]) 
index2 = pd.MultiIndex.from_product([["Number"], ["b", "d"]]) 
index = index1.union(index2) 
df.columns = index 

print(df) 
    Letter Number 
     a c  b d 
0  a 0  A 5 
1  b 1  B 6 
2  c 2  C 7 
3  d 3  D 8 
4  e 4  E 9 

df.columns = df.columns.map('_'.join) 
print(df) 

マルチインデックス列を平坦化出力より神託方法:

Letter_a Letter_c Number_b Number_d 
0  a   0  A   5 
1  b   1  B   6 
2  c   2  C   7 
3  d   3  D   8 
4  e   4  E   9 
関連する問題