Pandas中两个不同时间序列DataFrame的net列相加的高效实现方法
实现方案
直接基于两个DataFrame已有的epoch_ns做精确对齐求和,不需要生成任何中间时间切片,代码如下:
import pandas as pd # 将时间戳列设为索引用于对齐 df1_idx = df_1.set_index("epoch_ns") df2_idx = df_2.set_index("epoch_ns") # 两列相加,缺失值自动填充为0 result = df1_idx["net"].add(df2_idx["net"], fill_value=0).reset_index()
方案优势
- 无精度损失:完全保留原始纳秒级时间戳精度,数值计算完全基于原始值,不会出现重采样导致的偏移误差
- 内存占用低:内存消耗仅和两个原始DataFrame的总行数成正比,和时间跨度无关,不会生成多余的空数据行
- 执行效率高:pandas的索引对齐基于哈希匹配实现,时间复杂度为O(n+m)(n、m分别为两个表的行数),远快于重采样遍历全时间区间的操作
如果你的对齐规则不是精确匹配时间戳,而是需要将某一个表的时间戳匹配到另一个表最近的时间点,可以调整为merge_asof实现:
# 按时间升序排序是merge_asof的前提 df1_sort = df_1.sort_values("epoch_ns") df2_sort = df_2.sort_values("epoch_ns") # 左匹配最近时间戳,可根据需求调整direction参数 merged = pd.merge_asof(df1_sort, df2_sort, on="epoch_ns", direction="nearest") merged["net"] = merged["net_x"] + merged["net_y"] result = merged[["epoch_ns", "net"]]
内容的提问来源于stack exchange,提问作者HCSF
相关产品推荐
相关产品推荐

