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

基于时间戳条件合并DataFrame中多传感器数据的高效方案求解

Pandas按时间戳条件合并多传感器数据的高效实现方案

核心实现逻辑为摒弃逐行遍历方案,使用Pandas/Numpy原生向量化操作完成,针对十万行以上的数据集,性能提升可达数百到数千倍。

方案1:单切分点场景使用numpy.where实现

针对你当前的使用场景,这是最简实现方案:

import pandas as pd
import numpy as np

# 原有示例数据
idx = pd.date_range("2018-01-01", periods=6, freq="H")
df = pd.DataFrame(data={
    'sensor 1' :[5.4,5,5.2,3,2,2],
    'sensor 2' : [-1,-2,-3,5.5,5.4,5.6]},
    index=idx)

# 定义时间切分点
split_time = pd.Timestamp('2018-01-01 03:00:00')
# 一行代码生成结果
df['sensor'] = np.where(df.index < split_time, df['sensor 1'], df['sensor 2'])
result = df[['sensor']]

运行后得到的result和你预期的输出完全一致。

方案2:使用loc分段赋值

如果逻辑更复杂、存在多个前置过滤条件,可以用loc分段赋值,可读性更高:

split_time = pd.Timestamp('2018-01-01 03:00:00')
# 先默认赋值传感器1的数值
df['sensor'] = df['sensor 1']
# 满足时间条件的行替换为传感器2的数值
df.loc[df.index >= split_time, 'sensor'] = df.loc[df.index >= split_time, 'sensor 2']
result = df[['sensor']]

多切分点/多传感器扩展方案

如果后续需要对接更多传感器、配置多个时间切换点,可以用pd.cut批量打标签后取值,不需要新增多个判断分支:

# 示例:3个传感器对应3个时间区间
bins = [
    pd.Timestamp('2018-01-01 00:00:00'), 
    pd.Timestamp('2018-01-01 03:00:00'), 
    pd.Timestamp('2018-01-01 06:00:00'), 
    pd.Timestamp('2018-01-02 00:00:00')
]
# 每个时间区间对应的传感器列名
labels = ['sensor 1', 'sensor 2', 'sensor 3']
# 给每行打标签,标记该行应该取哪个传感器的值
df['use_sensor'] = pd.cut(df.index, bins=bins, labels=labels, right=False)
# 按标签取对应列的值
df['sensor'] = df.lookup(df.index, df['use_sensor'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:54:03