下采样非时间序列数据

时间:2018-06-25 17:00:23

标签: python-3.x pandas matplotlib time-series resampling

我有两个数据框,其中两个都是相对于某个开始时间的天数数据。一个数据帧是比其他数据帧信号数据以更高速率采样的信号数据。两个信号数据帧的总时间帧相同。我的问题是我可以使用哪种方法对具有更多行的行进行下采样以匹配行数。 数据框如下所示:(第一列是从特定开始时间算起的天数)

    Days  Data at 1hz
0  0.958        83.63
1  0.958        83.08
2  0.958        82.45
3  0.958        81.83
4  0.959        81.18

    Days  Data at 4hz
0  0.958        0.028
1  0.958        0.028
2  0.958        0.027
3  0.958        0.029
4  0.958        0.028

我尝试了pandas.resample()函数,但显然它仅适用于时间戳索引。此外,rolling()函数还使窗口上的其他值= 8(data1和data2的采样率之差)为Nan,并且不删除行。

有没有办法,我可以应用mean()或其他方法通过删除一些行使它们成为同一行?

1 个答案:

答案 0 :(得分:1)

使用rolling是一个好主意,您想要摆脱掉多余的行之后是dropna。下面是一个示例,df1中每个日期3行,df2中每个日期8行:

df1 = pd.DataFrame({'Date':[0.958]*3 + [0.959]*3, 
                    'Data_1': [83.63,83.08,82.45,81.83,82.76,84.97]})
df2 = pd.DataFrame({'Date':[0.958]*8 + [0.959]*8, 
                    'Data_4': [0.028,0.028,0.027,0.029]*4})

现在,您要删除每个日期df2中的5行,以便像df1一样仅获得3行,您可以分别使用groupbyrolling和{{ 1}}。如果您需要其他功能,可以更改功能dropna,而mean则更多用于修饰。

reset_index

给出df3 = df2.groupby('Date').rolling(window=6).mean().dropna().reset_index(drop=True)

的结果
df3

每个日期只有 Data_4 Date 0 0.028000 0.958 1 0.027833 0.958 2 0.028000 0.958 3 0.028000 0.959 4 0.027833 0.959 5 0.028000 0.959 中的数据有3行。

请注意,在df2rolling中,这是df2和df1 加1 之间每个日期的行数之差,否则,您将获得多一行。