2014-09-30 4 views
0

Уважаемые удивительные хакеров мира,Python Панды 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() или что-то в этом роде. Прочтите документы в группе By.

Смежные вопросы