python - Pandas 基于更高分辨率数据重新采样
问题描述
我有两个时间序列,一个是 30 分钟分辨率,一个是 15 分钟分辨率A和B,如下所示。我想使用B将A上采样到 15 分钟的分辨率来缩放给定间隔的值。因此,对于第一个值,它将是:
B['final']['01/11/2017 07:30:00'] = 77.0*29.7/(29.7+12.67)
A['辐照度']
2017-11-01 07:30:00 77.0
2017-11-01 08:00:00 214.0
2017-11-01 08:30:00 470.0
2017-11-01 09:00:00 714.0
B['实用程序']
2017-11-01 07:15:00 12.67
2017-11-01 07:30:00 29.70
2017-11-01 07:45:00 46.80
2017-11-01 08:00:00 74.07
2017-11-01 08:15:00 166.27
2017-11-01 08:30:00 256.50
2017-11-01 08:45:00 271.70
2017-11-01 09:00:00 354.33
所以最后的系列将是
B['决赛']
01/11/2017 07:30 54.0
01/11/2017 07:45 82.9
01/11/2017 08:00 131.1
01/11/2017 08:15 184.8
01/11/2017 08:30 285.2
我正在研究 Pandas 重新采样或合并函数,但可以看到这是可能的。有任何想法吗?
解决方案
假设你上采样,然后左合并到 util:
A.index = pd.to_datetime(A.index)
B.index = pd.to_datetime(B.index)
merged = pd.merge(B, A.resample('15s').ffill(), left_index=True, right_index=True, how='left')
>>> merged
util irrad
index
2017-11-01 07:15:00 12.67 NaN
2017-11-01 07:30:00 29.70 77.0
2017-11-01 07:45:00 46.80 77.0
2017-11-01 08:00:00 74.07 214.0
2017-11-01 08:15:00 166.27 214.0
2017-11-01 08:30:00 256.50 470.0
2017-11-01 08:45:00 271.70 470.0
2017-11-01 09:00:00 354.33 714.0
现在你可以使用
>>> merged.irrad * merged.util / (merged.util + merged.util.shift(-1))
index
2017-11-01 07:15:00 NaN
2017-11-01 07:30:00 29.894118
2017-11-01 07:45:00 29.813850
2017-11-01 08:00:00 65.952318
2017-11-01 08:15:00 84.163446
2017-11-01 08:30:00 228.237410
2017-11-01 08:45:00 203.982237
2017-11-01 09:00:00 NaN
dtype: float64
请注意,这不是您在问题中指定的内容。随意澄清你是如何得到最终结果的。
推荐阅读
- java - CORS 过滤在“授权”标头中不起作用
- python - 如何在 python 中使用 .log 文件绘制损失与历元图
- android - Android Studio - 如何在用户会话的 SharedPreferences 中安全地存储用户 ID?
- android - 为什么我不能在我的代码中解析值“字段”?
- c# - WPF 窗口无法从 Revit ExternalCommand 初始化
- python - 为什么远程部署路径中的 $PATH 与远程系统中的 $PATH 不同?
- javascript - 如何选择与jQuery有部分字符串匹配的所有元素
- javascript - setImmediate 是在异步 setState 更新后使用 jest 进行测试的一个很好的解决方案吗?
- google-maps-api-3 - 在谷歌地图上全屏显示 div
- android - Xamarin Forms - 如何在 xaml 中创建水平 ListView?