来自具有不同长度的数组的数据框-按行的均方值

时间:2019-06-11 22:08:59

标签: python pandas numpy

我要创建一个具有不同大小的数组的数据框。我想根据相似的值来填写缺失的值。

我试图将数组粘在一起,并用numpy进行排序和拆分。然后,我已经计算了分裂的平均值,并确定其值是否接近平均值或更好地用nan填充。

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)

还有另一种方法,可以更直接地用熊猫做这些东西吗? ...还是更优雅的东西?

0 个答案:

没有答案