2017-02-17 3 views
0

У меня есть следующие структуры данных: dsКак рассчитать средние значения по столбцам в заданной структуре данных?

{('AD', 'TYPE_B', 'TYPE_D'): [array([84.0, 85.0, 115.0], dtype=object), array([31.0, 23.0, 599.0], dtype=object), array([75.0, 21.0, nan], dtype=object), array([59.0, 52.0, 29.0], dtype=object)],('AD', 'TYPE_A', 'TYPE_N'): [array([84.0, 85.0, 115.0], dtype=object), array([31.0, 23.0, 599.0], dtype=object), array([75.0, 21.0, 300.0], dtype=object), array([59.0, 52.0, 29.0], dtype=object)]} 

мне нужно оценить средние значения по первому столбцу, второй столбец и третий столбец в каждой клавиши (т.е. ('AD', 'TYPE_B', 'TYPE_D') и ('AD', 'TYPE_A', 'TYPE_N')).

Некоторые массивы как array([75.0, 21.0, nan] содержат nan строки, которые я хочу заменить на 0.

Например, для ключевых ('AD', 'TYPE_B', 'TYPE_D') следующие результаты должны быть достигнуты (объясняется шаг за шагом):

Шаг 1:

84.0 85.0 115.0 
31.0 23.0 599.0 
75.0 21.0 nan 
59.0 52.0 29.0 

Шаг 2:

84.0 85.0 115.0 
31.0 23.0 599.0 
75.0 21.0 0 
59.0 52.0 29.0 

Шаг 3 (конечный результат):

('AD', 'TYPE_B', 'TYPE_D'): [62.25, 45.25, 185.75] 
+0

Ваш подход кажется разумным, хотя вам не нужны два шага. Что вы пробовали и где вы застряли? – zwer

ответ

3

использовать встроенные функции от NumPy.

import numpy as np 

ds = {('AD', 'TYPE_B', 'TYPE_D'): [np.array([84.0, 85.0, 115.0], dtype=object), 
            np.array([31.0, 23.0, 599.0], dtype=object), 
            np.array([75.0, 21.0, np.nan], dtype=object), 
            np.array([59.0, 52.0, 29.0], dtype=object)], 
     ('AD', 'TYPE_A', 'TYPE_N'): [np.array([84.0, 85.0, 115.0], dtype=object), 
            np.array([31.0, 23.0, 599.0], dtype=object), 
            np.array([75.0, 21.0, 300.0], dtype=object), 
            np.array([59.0, 52.0, 29.0], dtype=object)]} 

for key in ds.keys(): 
    #first cast to float and replace nan 
    item = np.nan_to_num(np.asarray(ds[key], dtype=np.float64)); 
    #calculate the mean 
    mean = np.mean(item, axis=0) 
    #store it in the dictionary 
    ds[key] = mean 

print ds 
+1

Преобразование отдельных массивов 'object' в массив 2d' float' является критическим шагом. Замена 'nan' не работает, когда элементы являются« объектами ». – hpaulj

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