python-3.x - 下采样非时间序列数据

标签 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() 函数将 window = 8 上的其他值(data1 和 data2 的采样率差异)作为 Nan 并且不会删除行。

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

最佳答案

使用 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 获取它, rollingdropna。如果您需要其他功能,可以更改函数 meanreset_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

df2 中的数据每个日期只有 3 行。

注意在rolling中,window = 6,就是df2和df1每个Date行数之差加1,否则你会得到额外的一行。

关于python-3.x - 下采样非时间序列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028493/

相关文章:

pandas Multiindex,仅对一个级别的值进行排序

python - Pandas 通过滚动打开的窗口进行分组

python - 是否可以在 matplotlib 中添加一个字符串作为图例项

python matplotlib : Plotting to GUI in non-main thread

python - 为什么我需要使用 'while' 函数来解决这个问题?

python - f = lambda n :(1, f(n-1)*n)[n>1] 在 Python 3 中给出 RunTimeError

python-3.x - 在 python 中,如何将日期列表转换为自首次访问以来的天数?

Python Quantlib 将 Quantlib 日期转换为日期时间

python - 如何阻止 bokeh 在 Jupyter Notebook 中打开新标签页?

python - 关于Python语句的原子性和全局解释器锁