不同长度数组中的数据帧按rmean填充缺失值

2024-04-26 10:48:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用不同大小的数组创建一个数据帧。我想根据相似的值来填充缺少的值。你知道吗

我试着把数组粘在一起,用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)

有没有别的办法,更直接地和熊猫做这些事。。。还是更优雅的?你知道吗


Tags: inforlennpresrandomvalarray