2014-09-30 6 views
0

친애하는 놀라운 해커,파이썬 팬더 DataFrame 어떻게 세계의

내가 초보자이야을 돌리고, 그리고 파이썬/팬더 기능을 내가 원하는 "변화"를 달성 할 수있는 알아낼 수 없습니다. 내가 가지고있는 것 ("원본")과 내가 원하는 결과 ("원하는 것")가 긴 설명 (나 생각하고 희망하는 것)보다 낫다는 것을 보여줍니다.

import pandas as pd 

일본어 입력 DataFrame

df_orig = pd.DataFrame() 
df_orig["Treatment"] = ["C", "C", "D", "D", "C", "C", "D", "D"] 
df_orig["TimePoint"] = [24, 48, 24, 48, 24, 48, 24, 48] 
df_orig["AN"] = ["ALF234","ALF234","ALF234","ALF234","XYK987","XYK987","XYK987","XYK987"] 
df_orig["Bincode"] = [33,33,33,33,44,44,44,44] 
df_orig["BC_all"] = ["33.7","33.7","33.7","33.7","44.9","44.9","44.9","44.9"] 
df_orig["RIA_avg"] = [0.202562419159333,0.281521224788666, 0.182828319454333,0.294909088002333, 
        0.105941322218833,0.247949961707,0.1267545610749,0.159711714967666] 
df_orig["sum14N_avg"] = [4120031.79121666,3742633.37033333,4659315.47073666,4345668.76408666, 
        26307312.1188333,24089229.9177999,35367286.7322666,34093045.3129] 

표시 원래 DataFrame

enter image description here

원하는 DataFrame 입력,

df_wanted = pd.DataFrame() 
df_wanted["AN"] = ["ALF234","XYK987"] 
df_wanted["Bincode"] = [33,44] 
df_wanted["BC_all"] = ["33.7","44.9"] 
df_wanted["C_24_RIA_avg"] = [0.202562419159333, 0.105941322218833] 
df_wanted["C_48_RIA_avg"] = [0.281521224788666,0.247949961707] 
df_wanted["D_24_RIA_avg"] = [0.182828319454333,0.1267545610749] 
df_wanted["D_48_RIA_avg"] = [0.294909088002333, 0.159711714967666] 
df_wanted["C_24_sum14N_avg"] = [4120031.791, 26307312.12] 
df_wanted["C_48_sum14N_avg"] = [3742633.37, 24089229.92] 
df_wanted["D_24_sum14N_avg"] = [4659315.471, 35367286.73] 
df_wanted["D_48_sum14N_avg"] = [4345668.764, 34093045.31] 

쇼 DataFrame

enter image description here

원하는

는 귀하의 지원 주셔서 대단히 감사합니다!

답변

2

pd.pivot_table을 사용하여 피벗하고 싶습니다. 이 작동 방식을 더 잘 이해하려면 the examples on pivot tables을 참조하십시오.

다음은 원하는 것을 제공해야합니다. 당신이 당신의 출력에 언급, 오히려 작업하기 편리해야 열과 행 모두에서 계층 인덱스가있을 것 같은 열 이름이 정확히 변환되지 않습니다

df_wanted = pd.pivot_table(
    df_orig, 
    index=['AN', 'Bincode', 'BC_all'], 
    columns=['Treatment', 'Timepoint'], 
    values=['RIA_avg', 'sum14N_avg'] 
) 

참고.

이 형식에서 행/열/값을 얻기 .loc를 사용하여 가능하다 :

df_wanted.loc['XYK987', :] 
df_wanted.loc[:, ('sum14N_avg')] 
df_wanted.loc['ALF234', ('RIA_avg', 'C', 24)] 
+0

가 대단히 감사합니다! – tryptofame

0

출력이 제대로 정렬되지 않았으므로 따라 가기가 어렵습니다. 그러나 그것은 df.groupby('AN').mean() 또는 이와 비슷한 것 같습니다. Group By의 문서를 읽으십시오.