python-3.x - 重采样数据帧的 2D 插值
问题描述
我想在重新采样后对数据帧进行 2D 插值。重采样部分可以是按天、按月或按分钟。下面的例子只是为了说明这个过程。我不想从数据帧中逐列删除数据,而是想在数据帧本身中执行重新采样和插值。
例子:
import pandas as pd
import scipy.interpolate
df = pd.DataFrame.from_dict({'time': {0: pd.Timestamp('2015-01-01 00:30:00'),
1: pd.Timestamp('2015-01-01 00:30:00'),
2: pd.Timestamp('2015-01-01 00:30:00'),
3: pd.Timestamp('2015-01-01 00:30:00'),
4: pd.Timestamp('2015-02-01 00:30:00'),
5: pd.Timestamp('2015-02-01 00:30:00'),
6: pd.Timestamp('2015-02-01 00:30:00'),
7: pd.Timestamp('2015-02-01 00:30:00')},
'x': {0: 25.0,
1: 25.0,
2: 25.5,
3: 25.5,
4: 25.0,
5: 25.0,
6: 25.5,
7: 25.5},
'y': {0: 51.25,
1: 51.875,
2: 51.25,
3: 51.875,
4: 51.25,
5: 51.875,
6: 51.25,
7: 51.875},
'z': {0: 1.9466316037407283e-13,
1: 1.4071156620529962e-13,
2: 2.1328328914192035e-13,
3: 1.5983803094022503e-13,
4: 1.8673746631035076e-13,
5: 1.1844342238769012e-13,
6: 2.0592551372867335e-13,
7: 1.341905238186683e-13}})
df.set_index("time", inplace=True)
然后插值片:
interp_x = df["x"].values
interp_y = df["y"].values
interp_z = df["z"].values
interp_f = scipy.interpolate.interp2d(x=interp_x, y=interp_y, z=interp_z)
最后,以下
df.resample("1M").apply(lambda r: interp_f(r["x"], r["y"]))
没有按预期工作,因为我得到:
time
2015-01-31 [[1.9070031334221175e-13, 1.9070031334221175e-...
2015-02-28 [[1.9070031334221175e-13, 1.9070031334221175e-...
Freq: M, dtype: object
解决方案
推荐阅读
- javascript - 未捕获的 ConfigError:使用 Jquery 查询构建器时未定义目标
- node.js - 如何在可视代码中调试 Angular 7 库
- java - 在 tomcat 服务器中运行 servlet XQuery 时出现空白页面
- java - 使用 Apache POI 设置 Excel 工作表散点图标记图标的颜色
- java - 是否可以在 Windows 10 中为 AWT 应用程序提供清晰的任务栏图标
- database - 智能家居中的区块链使用
- spring - 有没有人将 Spring Security 从 3.1.2 迁移到 5.1.4
- coq - 定理蕴涵的coq语法
- ruby - 基于 Chef 版本的 Cookbook 依赖项
- javascript - 是否可以检测网络应用程序上的 android 后退按钮?