2017-12-10 18 views
3

私は同様の質問を見ましたが、私はより直接的で抽象的です。Pandas DataFrameを単一の行に変換するDataFrame

「n」行のデータフレームを持っています。「n」は小さい番号です。インデックスは単に行番号であると仮定できます。 私はただ1つの行に変換したいと思います。私は

A,B,C,D,E 
--------- 
1,2,3,4,5 
6,7,8,9,10 
11,12,13,14,5 

を持っている場合

だから例えば私は、結果として単一の行を持つデータフレームをしたい:

A_1,B_1,C_1,D_1,E_1,A_2,B_2_,C_2,D_2,E_2,A_3,B_3,C_3,D_3,E_3 
-------------------------- 
1,2,3,4,5,6,7,8,9,10,11,12,13,14,5 

パンダでこれを行うには、最も慣用的な方法だろうか?

答えて

4

のはstackto_frameを使用して、これを試してみましょう、とT:

df.index = df.index + 1 
df_out = df.stack() 
df_out.index = df_out.index.map('{0[1]}_{0[0]}'.format) 
df_out.to_frame().T 

出力:

A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 A_3 B_3 C_3 D_3 E_3 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 
+0

これは@Wenが正しく投稿されたかったですか? – Dark

+1

swaplevelなしで@Dark :) –

+0

私はあなたからの列マッピングを学んだが、私はそれを逃した、あなたは私の投票を得る;) – Dark

4

私たちは、あなたが行うことができますstackswaplevel

df1=df.stack().swaplevel() 
df1.index=df1.index.map('{0[0]}_{0[1]}'.format) 
df1.to_frame().T 
Out[527]: 
    A_0 B_0 C_0 D_0 E_0 A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 

それとも、numpyの

pd.DataFrame(data=np.concatenate(df.values),index=[m+'_'+str(n) for m,n in zip(df.columns.tolist()*3,np.repeat([1,2,3],df.shape[1]))]).T 
Out[551]: 
    A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 A_3 B_3 C_3 D_3 E_3 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 
+0

私はあなたがスタックのために行ってきました、スタック解除考えます。 ) – Dark

+1

@Dark aha、ほぼ同じく、私たちも溶ける:-) – Wen

+0

とてもきれいにありがとう – user3635284

3

スタック解除を使用することができますを必要とし、あなたがソートされた列をしたい場合はすなわち

ndf = df.unstack().to_frame().T 

ndf.columns = ndf.columns.map('{0[0]}_{0[1]}'.format) 

    A_0 A_1 A_2 B_0 B_1 B_2 C_0 C_1 C_2 D_0 D_1 D_2 E_0 E_1 E_2 
0 1 6 11 2 7 12 3 8 13 4 9 14 5 10 5 

をマッピング

ndf = df.unstack().to_frame().T.sort_index(1,1) 
関連する問題