pandas 对时间戳有微小变化的时间序列求和

e37o9pze  于 2023-04-10  发布在  其他
关注(0)|答案(1)|浏览(155)

我想象我有几个时间序列,如下所示,来自不同的“来源”:

time     events
0      1000    1080000
1      2003    2122386
2      3007    3043985
3      4007    3872544
4      5007    4853763

这里,每1000 ms对单调递增的计数 * 事件 * 进行采样。采样不是 * 精确的 *,因此大多数时间戳与其理想值相差几ms,例如,第二个点是在2003而不是2000。
我想对这些时间序列进行求和:它们都将在~1000 ms处被采样,但可能不同意精确的毫秒。例如,另一个时间序列可以是:

time     events
0      1000    1070000
1      2002    2122486
2      3006    3063985
3      4007    3872544
4      5009    4853763

我希望最终结果是合理的。例如,每个输入 Dataframe 的行数相同,时间戳列与第一列相同,或者输入时间的平均值。只要输入是平滑的,输出也应该是平滑的。

pqwbnv8z

pqwbnv8z1#

我建议使用最接近的方法DataFrame.reindex()。示例:

def combine_datasources(reference_df, extra_dfs, tolerance_ms=100):
    reindexed_df_list = [df.reindex(reference_df.index, method='nearest', tolerance=tolerance_ms) for df in extra_dfs]
    combined = pd.concat([reference_df, *reindexed_df_list])
    return combined.groupby(combined.index).sum()

combine_datasources(df_a, [df_b])

此代码更改extra_dfs列表中 Dataframe 的索引以匹配引用 Dataframe 的索引。然后,它将所有 Dataframe 连接在一起。它使用groupby进行求和,这需要索引完全匹配才能工作。时间戳将与引用 Dataframe 上的时间戳相同。
请注意,如果您的数据来自引用 Dataframe 未覆盖的时间段,则该数据将被删除。
以下是问题中数据集的输出:

events
time         
1000  2150000
2003  4244872
3007  6107970
4007  7745088
5007  9707526

相关问题