2017-09-06 14 views
1

私はpandas DataFrameをオブジェクトのリストで構成し、各オブジェクトに対して12個の値からなる4つのリストを作成しました。私は階層的なインデックスをデータフレームを転置して持っていると思いPandas/Pythonで複雑なDataFrameを移調する

Current Data

(「名前」、「4つのリストの名前」):これは一般的な形式があります。これの一般的な形式は、私の元データであることrows_listで、Desired Result私は以下のことを試してみました

次のようになります。

import pandas as pd 

test_table = pd.DataFrame(rows_list, columns=("name", "frac_0", "frac_1","frac_2", "frac_3")) 

name = pd.Series(test_table['name']) 

del test_table['name'] 
test_table = test_table.T 
test_table = test_table.sort_index([subjectname]) 

これは私

「非ハッシュタイプ述べTypeError例外を与えます: 'リスト'"。私は(リスト1、リスト2、など)のリスト内の項目に対応する列を必要とするような単純なtest_table.T動作も、私は必要なものを私に与えていない

、名前でインデックス化される行と次にList1、List2。新しい列を追加したり、複数のシリーズから新しいDataFrameを構築しようとしたりしてきましたが、何も動作していないようです。

ありがとうございました!

+1

を使用すると、データフレームのサンプルを提供しなければならない、我々はので、テスト 'test_table'をカント'row_list'変数はありません。 [再現可能なパンダの例](https://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)の作成方法をお読みください。 – DJK

答えて

1

モックDF:道のうち

df = pd.DataFrame(columns=['Name', 'List 1', 'List 2'], data=[['A', [1,2,3,4], [1,2,3,4]], ['B', [1,2,3,4], [1,2,3,4]], ['C', [1,2,3,4], [1,2,3,4]]]) 

GET '名前':

df.set_index('Name', inplace=True) 

       List 1  List 2 
    Name        
    A  [1, 2, 3, 4] [1, 2, 3, 4] 
    B  [1, 2, 3, 4] [1, 2, 3, 4] 
    C  [1, 2, 3, 4] [1, 2, 3, 4] 

n_name = len(df.index) 
n_list = len(df.columns) 
n_item = len(df.iat[0, 0]) 

DF値は、現在(3,2)の形状を有しています。このモックdfで、1次元を削除するために(6、)配列に変更する必要があります。その後、それをリストにします。

vals = list(df.values.reshape((n_list * n_name),)) 

[[1, 2, 3, 4], 
[1, 2, 3, 4], 
[1, 2, 3, 4], 
[1, 2, 3, 4], 
[1, 2, 3, 4], 
[1, 2, 3, 4]] 

ここでインデックスレベルの値を取得します。 'Name'は最初のレベルなので、そのレベルを次のレベルの一意の値の数だけ繰り返すので、repeatを使用します。リストのレベルは、我々はタイルを使用するので、我々は順序を維持したい。次に、あなたのカラム名が追加されます。

idx_name = np.repeat(df.index.values, n_list) 
idx_list = np.tile(df.columns.values, n_name) 
columns = ['Col' + str(n) for n in list(range(1, n_item+1))] 

は、最終的なDFを作成します。

df = pd.DataFrame(data=vals, index=[idx_name, idx_list], columns=columns) 

      Col1 Col2 Col3 Col4 
A List 1  1  2  3  4 
    List 2  1  2  3  4 
B List 1  1  2  3  4 
    List 2  1  2  3  4 
C List 1  1  2  3  4 
    List 2  1  2  3  4 

コード:

df = pd.DataFrame(columns=['Name', 'List 1', 'List 2'], data=[['A', [1,2,3,4], [1,2,3,4]], ['B', [1,2,3,4], [1,2,3,4]], ['C', [1,2,3,4], [1,2,3,4]]]) 

df.set_index('Name', inplace=True) 

n_name = len(df.index) 
n_list = len(df.columns) 
n_item = len(df.iat[0, 0]) 

vals = list(df.values.reshape((n_list * n_name),)) 
idx_name = np.repeat(df.index.values, n_list) 
idx_list = np.tile(df.columns.values, n_name) 
columns = ['Col' + str(n) for n in list(range(1, n_item+1))] 

df = pd.DataFrame(data=vals, index=[idx_name, idx_list], columns=columns) 
+0

これは完全に機能しました!私はまだあなたが後半に何をしたのかを理解しようとしていますが、それは私がよく知らない機能ですが、ありがとうございます! – user6570204

関連する問題