我有两个数据框,其中两个都是相对于某个开始时间的天数数据。一个数据帧是比其他数据帧信号数据以更高速率采样的信号数据。两个信号数据帧的总时间帧相同。我的问题是我可以使用哪种方法对具有更多行的行进行下采样以匹配行数。 数据框如下所示:(第一列是从特定开始时间算起的天数)
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()
或其他方法通过删除一些行使它们成为同一行?
答案 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行,您可以分别使用groupby
,rolling
和{{ 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行。
请注意,在df2
,rolling
中,这是df2和df1 加1 之间每个日期的行数之差,否则,您将获得多一行。>