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

Python:基于传感器与卫星数据计算每日确定值的实现需求

解决方案:基于传感器与卫星数据计算每日确定温度值

问题场景

你有如下格式的温度数据DataFrame,包含每日多个传感器和卫星的温度读数:

日期设备ID数值
01/01/2022Sensor135
01/01/2022Sensor234.33
01/01/2022Sensor322.33
01/01/2022Satellite36.45

需要按日期计算每日的Definitive确定值,规则如下:

  1. 先计算当日所有传感器的原始均值,排除数值低于原始均值10%及以上的传感器,再计算筛选后的新均值
  2. 对比新均值与当日卫星值:若新均值更小,则确定值为新均值;否则取卫星值

最终需要在原DataFrame中追加每日的确定值行,得到目标结果。

实现代码

使用pandas即可完成上述逻辑,以下是完整实现:

import pandas as pd

# 示例数据
data = {
    '日期': ['01/01/2022', '01/01/2022', '01/01/2022', '01/01/2022'],
    '设备ID': ['Sensor1', 'Sensor2', 'Sensor3', 'Satellite'],
    '数值': [35, 34.33, 22.33, 36.45]
}
df = pd.DataFrame(data)

# 按日期分组处理
def process_daily_data(group):
    # 分离传感器和卫星数据
    sensors = group[group['设备ID'].str.startswith('Sensor')]['数值']
    satellite_val = group[group['设备ID'] == 'Satellite']['数值'].values[0]
    
    # 步骤1:计算原始均值,筛选符合条件的传感器
    original_mean = sensors.mean()
    # 排除低于原始均值90%的传感器(即低于原始均值10%及以上)
    filtered_sensors = sensors[sensors >= original_mean * 0.9]
    new_mean = filtered_sensors.mean()
    
    # 步骤2:确定最终值
    definitive_val = new_mean if new_mean < satellite_val else satellite_val
    
    # 返回需要添加的确定值行
    return pd.DataFrame({
        '日期': [group.name],
        '设备ID': ['Definitive'],
        '数值': [definitive_val]
    })

# 分组计算并合并结果
definitive_rows = df.groupby('日期').apply(process_daily_data).reset_index(drop=True)
final_df = pd.concat([df, definitive_rows], ignore_index=True)

# 打印结果
print(final_df)

代码说明

  1. 数据拆分:通过groupby('日期')按日期分组,每组内分离传感器数据和卫星值
  2. 传感器筛选:计算原始均值后,保留数值≥原始均值90%的传感器,再计算新均值
  3. 确定值计算:对比新均值和卫星值,取较小的作为当日确定值
  4. 结果合并:将计算得到的确定值行追加到原DataFrame,得到最终结果

运行结果

执行上述代码后,final_df的输出与你期望的结果一致:

日期设备ID数值
01/01/2022Sensor135.000
01/01/2022Sensor234.330
01/01/2022Sensor322.330
01/01/2022Satellite36.450
01/01/2022Definitive34.665

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:05:26