2017-12-10 5 views
3

비슷한 질문을 보았지만 제는 직접적이고 추상적입니다.Pandas DataFrame을 단일 행으로 변환하십시오. DataFrame

"n"개의 행을 가진 데이터 프레임이 있습니다. "n"은 작은 수입니다. 인덱스는 단지 행 번호라고 가정 할 수 있습니다. 하나의 행으로 변환하고 싶습니다.

그래서 예를 들어 나는 하나의 행이 결과로 내가 원하는

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

dataframe있는 경우 :

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

의이를 해보자 617,451,515,: 출력

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

@ swarklevel없이 @Dark : –

+0

나는 당신에게서 열 매핑을 배웠지 만 그 중 하나를 놓쳤다. 내 표를 얻는다;) – Dark

4

우리는 stack

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 

swaplevel 필요 또는 당신은

을 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 

를 매핑 할 수 있습니다

, to_frame, 및 T를 사용하여
ndf = df.unstack().to_frame().T.sort_index(1,1) 
관련 문제