2017-04-01 11 views
3

:私は、マルチレベルのデータフレームにこの辞書を変換しようとすると辞書をマルチレベルのデータフレームに変換するには?与えられた

A = pd.DataFrame([[1, 5, 2, 8, 2], [2, 4, 4, 20, 2], [3, 3, 1, 20, 2], [4, 2, 2, 1, 0], 
       [5, 1, 4, -5, -4], [1, 5, 2, 2, -20], [2, 4, 4, 3, 0], [3, 3, 1, -1, -1], 
       [4, 2, 2, 0, 0], [5, 1, 4, 20, -2]], 
      columns=['a', 'b', 'c', 'd', 'e'], 
      index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 

B = pd.DataFrame([[0, 0, 0, 8, 2], [1, 1, 1, 1, 1], [0, 0, 0, 8, 2], [0, 0, 2, 1, 0], 
       [5, 1, 4, -5, -4], [0, 0, 0, 8, 2], [2, 4, 4, 3, 0], [1, 3, 1, -1, -1], 
       [1, 1, 2, 0, 0], [2, 2, 2, 20, -2]], 
      columns=['a', 'b', 'c', 'd', 'e'], 
      index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 

test_list = [('test1', A), ('test2', B)] 
d_test = dict(test_list) 

は、その後、私はトラブルに実行します。しかし、私はマルチレベルをどのように指定するのか分からず、2番目のレベルのデータフレームの名前に 'key'を付ける必要があります。これは、ここでは(再び)になるだけで、ここで(既にコメントで与えられた)答え を持つことの目的のために所望の出力

df 

    test_1    test_2 
    a b c d e a b c d e 
1 1 5 2 8 2 0 0 0 8 2 
2 2 4 4 20 2 1 1 1 1 1 
3 3 3 1 20 2 0 0 0 8 2 
4 4 2 2 1 0 0 0 2 1 0 
5 5 1 4 -5 -4 5 1 4 -5 -4 
6 1 5 2 2 -20 0 0 0 8 2 
7 2 4 4 3 0 2 4 4 3 0 
8 3 3 1 -1 -1 1 3 1 -1 -1 
9 4 2 2 0 0 1 1 2 0 0 
10 5 1 4 20 -2 2 2 2 20 -2 
+0

最初に辞書が必要ですか? –

+0

さらに、インデックスが 'B'や' A'でもない場合はどうなりますか? –

+0

@WillemVanOnsemはい、リストからそれを行うことが劇的に簡単でない限り、私はこのコードに対応するために残りのコードを変更するかどうか評価する必要があります。\\インデックスは同一です。 – hernanavella

答えて

1

です:

import pandas as pd 
A = pd.DataFrame([[1, 5, 2, 8, 2], [2, 4, 4, 20, 2], [3, 3, 1, 20, 2], [4, 2, 2, 1, 0], 
       [5, 1, 4, -5, -4], [1, 5, 2, 2, -20], [2, 4, 4, 3, 0], [3, 3, 1, -1, -1], 
       [4, 2, 2, 0, 0], [5, 1, 4, 20, -2]], 
      columns=['a', 'b', 'c', 'd', 'e'], 
      index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
B = pd.DataFrame([[0, 0, 0, 8, 2], [1, 1, 1, 1, 1], [0, 0, 0, 8, 2], [0, 0, 2, 1, 0], 
       [5, 1, 4, -5, -4], [0, 0, 0, 8, 2], [2, 4, 4, 3, 0], [1, 3, 1, -1, -1], 
       [1, 1, 2, 0, 0], [2, 2, 2, 20, -2]], 
      columns=['a', 'b', 'c', 'd', 'e'], 
      index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
AB=pd.concat([A,B], axis=1) 
header = ['test1','test1','test1','test1','test1','test2','test2','test2','test2','test2'] 
AB.columns = pd.MultiIndex.from_tuples(list(zip(header, AB.columns))) 
print(AB) # gives what was asked for 
print("test1: \n", AB.test1) # gives A 
print("test2: \n", AB.test2) # gives B 

別(ダウン実物に上記のコメントで与えられた同じ(返事を)達成の生活状況)方法:

test_list = [('test1', A), ('test2', B)] 
d_test = dict(test_list) 
AB = pd.concat(d_test.values(), keys=d_test.keys(), axis=1) 
# what means: AB = pd.concat([A,B], keys=['test1', 'test2'], axis=1) 

出力上記のコード:

test1    test2    
     a b c d e  a b c d e 
1  1 5 2 8 2  0 0 0 8 2 
2  2 4 4 20 2  1 1 1 1 1 
3  3 3 1 20 2  0 0 0 8 2 
4  4 2 2 1 0  0 0 2 1 0 
5  5 1 4 -5 -4  5 1 4 -5 -4 
6  1 5 2 2 -20  0 0 0 8 2 
7  2 4 4 3 0  2 4 4 3 0 
8  3 3 1 -1 -1  1 3 1 -1 -1 
9  4 2 2 0 0  1 1 2 0 0 
10  5 1 4 20 -2  2 2 2 20 -2 
test1: 
    a b c d e 
1 1 5 2 8 2 
2 2 4 4 20 2 
3 3 3 1 20 2 
4 4 2 2 1 0 
5 5 1 4 -5 -4 
6 1 5 2 2 -20 
7 2 4 4 3 0 
8 3 3 1 -1 -1 
9 4 2 2 0 0 
10 5 1 4 20 -2 
test2: 
    a b c d e 
1 0 0 0 8 2 
2 1 1 1 1 1 
3 0 0 0 8 2 
4 0 0 2 1 0 
5 5 1 4 -5 -4 
6 0 0 0 8 2 
7 2 4 4 3 0 
8 1 3 1 -1 -1 
9 1 1 2 0 0 
10 2 2 2 20 -2 
関連する問題