Кадры данных из массивов разной длины - заполнить пропущенные значения значением строки - PullRequest
0 голосов
/ 12 июня 2019

Я хочу создать фрейм данных из массивов разного размера. Я хочу заполнить пропущенные значения в зависимости от аналогичных значений.

Я пытался склеить массивы и выполнить сортировку и разбиение с помощью numpy. Затем я вычисляю среднее значение разбиений и решаю, является ли его значение близким к среднему или лучше его заполнить нан.

def find_nearest(array, value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return idx

#generate sample data
loa = [((np.arange(np.random.randint(1,3),np.random.randint(3,6)))*val).tolist() 
            for val in np.random.uniform(0.9,1.1,5)]

#reshape
flat_list = sum(loa,[])

#add some attributes
attributes = [np.random.randint(-3,-1) for x in range(len(flat_list))]

#sort and split on percentage change
flat_list.sort()
arr = np.array(flat_list)
arr_splits = np.split(arr, np.argwhere(np.diff(arr)/arr[1:]*100 > 12)[:,0])

#means of the splits
means = [np.mean(arr) for arr in arr_splits]

#create dataframe
i = 0
res = np.zeros((len(loa), len(means)*2))*np.nan
for row, l in enumerate(loa):
    for val in l:
        col = find_nearest(means, val)
        res[row, col] = val
        res[row, col+len(means)] = attributes[i]
        i = i + 1

df = pd.DataFrame(res)

Есть ли другой способ сделать это более напрямую с пандами? ... или что-то более элегантное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...