2014-12-12 5 views
0

У меня есть список Dataframes, что я хочу, чтобы вычислить среднее значение поПанды добавляющим Series для DataFrame записи в файл

~ pieces[1].head() 

    Sample Label C_RUNTIMEN N_TQ N_TR ... N_GEAR1 N_GEAR2 N_GEAR3 \ 
301  manual 82.150833  7 69 ...  3.615 1.952 1.241 
302  manual 82.150833  7 69 ...  3.615 1.952 1.241 
303  manual 82.150833  7 69 ...  3.615 1.952 1.241 
304  manual 82.150833  7 69 ...  3.615 1.952 1.241 
305  manual 82.150833  7 69 ...  3.615 1.952 1.241 

, поэтому я перекручивание через них ->

pieces = np.array_split(df,size) 
output = pd.DataFrame() 
for piece in pieces: 
    dp = piece.mean() 
    output = output.append(dp,ignore_index=True) 

К сожалению результат сортируется (имена столбцов в алфавитном порядке на выходе), и я хочу сохранить исходный порядок столбцов (как видно вверху).

~ output.head() 

    C_ABSHUM C_ACCFUELGALN  C_AFR  C_AFRO C_FRAIRWS C_GEARRATIO \ 
    0 44.578937  66.183858 14.466816 14.113321 18.831117  6.677792 
    1 34.042593  66.231229 14.320409 14.113321 22.368983  6.677792 
    2 34.497194  66.309320 14.210066 14.113321 25.353414  6.677792 
    3 43.430931  66.376632 14.314854 14.113321 28.462130  6.677792 
    4 44.419204  66.516515 14.314653 14.113321 32.244107  6.677792 

Я пробовал варианты concat и т. Д. Без успеха. Есть ли другой способ подумать об этом?

+0

Трудно понять, что вы просите. Пожалуйста, укажите автономный пример, его выход и желаемый результат ... – shx2

ответ

1

Моя рекомендация заключалась бы в том, чтобы объединить список данных с помощью pd.concat. Это позволит вам использовать стандартную группу-by/apply. В этом примере multi_df является MultiIndex, который ведет себя как обычный кадр данных, только индексацию и group by is a little different:

x = [] 
for i in range(10): 
    x.append(pd.DataFrame(dict(zip(list('abc'), [i + 1, i + 2, i + 3])), index = list('ind'))) 

Теперь х содержит список фреймов данных формы

a b c 
i 2 3 4 
n 2 3 4 
d 2 3 4 

И

multi_df = pd.concat(x, keys = range(len(x))) 
result = multi_df.groupby(level = [0]).apply(np.mean) 

мы получаем кадр данных, который выглядит как

a b c 
0 1 2 3 
1 2 3 4 
2 3 4 5 
3 4 5 6 
4 5 6 7 
5 6 7 8 
6 7 8 9 
7 8 9 10 
8 9 10 11 
9 10 11 12 

Затем вы можете просто вызвать result.to_csv ('filepath'), чтобы записать это.

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