Python:基于传感器与卫星数据计算每日确定值的实现需求
解决方案:基于传感器与卫星数据计算每日确定温度值
问题场景
你有如下格式的温度数据DataFrame,包含每日多个传感器和卫星的温度读数:
| 日期 | 设备ID | 数值 |
|---|---|---|
| 01/01/2022 | Sensor1 | 35 |
| 01/01/2022 | Sensor2 | 34.33 |
| 01/01/2022 | Sensor3 | 22.33 |
| 01/01/2022 | Satellite | 36.45 |
需要按日期计算每日的Definitive确定值,规则如下:
- 先计算当日所有传感器的原始均值,排除数值低于原始均值10%及以上的传感器,再计算筛选后的新均值
- 对比新均值与当日卫星值:若新均值更小,则确定值为新均值;否则取卫星值
最终需要在原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)
代码说明
- 数据拆分:通过
groupby('日期')按日期分组,每组内分离传感器数据和卫星值 - 传感器筛选:计算原始均值后,保留数值≥原始均值90%的传感器,再计算新均值
- 确定值计算:对比新均值和卫星值,取较小的作为当日确定值
- 结果合并:将计算得到的确定值行追加到原DataFrame,得到最终结果
运行结果
执行上述代码后,final_df的输出与你期望的结果一致:
| 日期 | 设备ID | 数值 |
|---|---|---|
| 01/01/2022 | Sensor1 | 35.000 |
| 01/01/2022 | Sensor2 | 34.330 |
| 01/01/2022 | Sensor3 | 22.330 |
| 01/01/2022 | Satellite | 36.450 |
| 01/01/2022 | Definitive | 34.665 |
内容的提问来源于stack exchange,提问作者Ignpl
相关产品推荐
相关产品推荐

