You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于时间戳合并Pandas DataFrame功率列的高效方法问询

高效合并不同时间间隔的Pandas功率数据

需要将两个Pandas DataFrame中时间戳(Unix时间戳)对应的功率值相加,但两个DataFrame的时间间隔存在差异(通常6秒,偶尔波动),且起止时间不同但有重叠区间。最初考虑的每秒插值重索引方法会大幅增加数据量、降低性能,以下是更高效的实现方案。

示例数据

df1

time  power
0      1355526770  1500
1      1355526776  1800
2      1355526782  1600
3      1355526788  1700
4      1355526794  1400

df2

time  power
0      1355526771  1250
1      1355526777  1200
2      1355526783  1280
3      1355526789  1290
4      1355526795  1300

高效实现方案

核心思路是仅在两个DataFrame的所有时间点的并集上进行插值,避免全量生成每秒数据,同时保证计算精度:

  1. 提取两个DataFrame的时间列,合并后去重并排序,得到需要计算的所有时间点集合
  2. 将两个DataFrame分别设置时间列为索引,在目标时间点上重索引并执行线性插值
  3. 对插值后的功率列求和,得到最终结果

代码实现

import pandas as pd

# 示例数据构造
df1 = pd.DataFrame({
    'time': [1355526770, 1355526776, 1355526782, 1355526788, 1355526794],
    'power': [1500, 1800, 1600, 1700, 1400]
})
df2 = pd.DataFrame({
    'time': [1355526771, 1355526777, 1355526783, 1355526789, 1355526795],
    'power': [1250, 1200, 1280, 1290, 1300]
})

# 步骤1:获取合并后的时间点(去重、排序)
all_times = pd.Series(pd.concat([df1['time'], df2['time']]).unique()).sort_values()

# 步骤2:设置索引并插值
df1_interp = df1.set_index('time').reindex(all_times).interpolate(method='linear', limit_area='inside')
df2_interp = df2.set_index('time').reindex(all_times).interpolate(method='linear', limit_area='inside')

# 步骤3:合并计算总功率
result = pd.DataFrame({
    'time': all_times,
    'total_power': df1_interp['power'] + df2_interp['power']
}).reset_index(drop=True)

print(result)

关键说明

  • limit_area='inside' 参数确保只在原始数据的起止时间范围内插值,避免对超出数据区间的时间点生成无意义的插值结果
  • 仅在两个DataFrame的时间点并集上计算,数据量仅为原始两个DataFrame行数之和(去重后),性能远高于每秒插值方案
  • 线性插值可以保证功率值随时间的连续变化符合实际场景

如果只需要重叠区间内的结果,可以在最后一步过滤时间范围:

# 计算重叠时间区间
start_time = max(df1['time'].min(), df2['time'].min())
end_time = min(df1['time'].max(), df2['time'].max())

# 过滤重叠区间数据
result_overlap = result[(result['time'] >= start_time) & (result['time'] <= end_time)]

内容的提问来源于stack exchange,提问作者Thomas Lee Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:50:19