用平均值法下采样

时间:2018-11-08 09:30:31

标签: python

我有一个return ( <TestClass /> ); 维数据帧,我想逐行下采样。因此,如果我有一个2数据帧,我希望它是100x2000。我已经尝试过滚动平均值,但是输出的尺寸正在基于列进行重新采样,并且仍然是原始形状。 尝试寻找其他方式时,我也发现了signal.resample,但我认为它不适合我的情况。如果我有100x500,我希望有[2,4,6,8,10,12,14,16,18]作为输出[4,10,16],同时计算平均值

有什么想法吗?

谢谢

3 个答案:

答案 0 :(得分:0)

def mean_pandas(your_df, start_roling=0, mean_roling = 3):
    a = [df.iloc[:,range(i,i+mean_roling)].mean(axis=1) for i in range(start_roling,len(df),mean_roling) if i+mean_roling<=len(df)]
    b = pd.DataFrame(np.array(a).T)
    return b

mean_pandas(your_df, 0, 3)

答案 1 :(得分:0)

尝试一下

A = pd.DataFrame(pd.np.random.randint(10, size=(18, 18)))
pd.DataFrame({i: A[A.index[i*3: i*3 + 3]].mean(axis=1).tolist() for i in range(A.shape[1]//3)})

答案 2 :(得分:0)

使用numpy.convolve

import numpy as np

arr = np.array([2,4,6,8,10,12,14,16,18])
n = 3
window = (1.0 / n) * np.ones(n,)
res = np.convolve(arr, window, mode='valid')[::n]

对于2 x N阵列:

from scipy import signal

arr = np.array([[2,4,6,8,10,12,14,16,18], [12,14,16,18,110,112,114,116,118]])
window = (1.0 / n) * np.ones((1, n))
#res = np.convolve(arr, window, mode='valid')[::n]
res = signal.convolve2d(arr, window, mode='valid')[:, ::n]