python - 如何扩展数据(插值?)
问题描述
我想通过插值(对吗?)数据来扩展数据帧中的列以匹配最长列的长度。
我不熟悉正确的术语,所以请更正我的词汇或告诉我如何更好地沟通。我相信pd.DataFrame.resample()
答案是肯定的,但是在彻底查看文档之后,我还没有确定如何“扩展”一个专栏。
我有一个这样的数据框:
2000-01-01 00:00:00 0 0 0
2000-01-01 00:01:00 1 1 3
2000-01-01 00:02:00 2 2 5
2000-01-01 00:03:00 3 3 3
2000-01-01 00:04:00 4 nan nan
2000-01-01 00:05:00 5 nan nan
2000-01-01 00:06:00 6 nan nan
我想“扩展”第二列,使其在时间上一样长,但不会丢失任何数据。执行所需的方法后,我希望数据如下所示:
2000-01-01 00:00:00 0 0 0
2000-01-01 00:01:00 1 0.5 1.5
2000-01-01 00:02:00 2 1 3
2000-01-01 00:03:00 3 1.5 4
2000-01-01 00:04:00 4 2 5
2000-01-01 00:05:00 5 2.5 4
2000-01-01 00:06:00 6 3 3
最终目标是平均每个索引上数据框中的所有列。如果有比“扩展”较短的列更简单的方法,请告诉我。我希望结果表如下所示:
2000-01-01 00:00:00 0
2000-01-01 00:01:00 1
2000-01-01 00:02:00 2
2000-01-01 00:03:00 2.8333
2000-01-01 00:04:00 3.6667
2000-01-01 00:05:00 3.8333
2000-01-01 00:06:00 4
很多马哈洛:)
编辑:我通过添加第三列更改了我发布的原始数据。我意识到我的原始帖子并没有反映出我需要一个适用于任意增加和减少且独立于其他列的列的解决方案。
解决方案
数据df
time col1 col2
0 2000-01-01 00:00:00 0 0.0
1 2000-01-01 00:01:00 1 1.0
2 2000-01-01 00:02:00 2 2.0
3 2000-01-01 00:03:00 3 3.0
4 2000-01-01 00:04:00 4 NaN
5 2000-01-01 00:05:00 5 NaN
6 2000-01-01 00:06:00 6 NaN
代码:
# get min/max values in col2
col2_min = df.col2.min()
col2_max = df.col2.max()
# restart col2 with min/max value only,
# and then interpolate values based on col1 values
df.col2 = np.nan
df.loc[df.col1.min(), 'col2'] = col2_min
df.loc[df.col1.max(), 'col2'] = col2_max
df.col2 = df.set_index('col1').col2.interpolate(method='index')
df['col3'] = (df.col1 + df.col2) / 2
输出:
time col1 col2 col3
0 2000-01-01 00:00:00 0 0.0 0.00
1 2000-01-01 00:01:00 1 0.5 0.75
2 2000-01-01 00:02:00 2 1.0 1.50
3 2000-01-01 00:03:00 3 1.5 2.25
4 2000-01-01 00:04:00 4 2.0 3.00
5 2000-01-01 00:05:00 5 2.5 3.75
6 2000-01-01 00:06:00 6 3.0 4.50
我假设col2
值与 成线性比例col1
,因此首先确定min
和max
中的值col1
并col2
尝试匹配它们。col2
然后根据值插入col1
值。
推荐阅读
- python - 使用 postgres/postgis 将具有相同 id 的 5 个字段关联到具有相同单个 id 的表
- r - 通过向起始坐标添加距离来计算新的纬度/经度坐标?
- html - 带有 Bootstrap 的 4 个内联输入的 2 个内联标签
- python - 如何提高入住率预测的准确性?
- json - Rest Api 数据表示
- c# - .NET Core、VS2019 和 Selenium:IE 驱动程序不起作用(WebDriverException - HTTP 请求超时)
- azure - 以小规模管理 Docker 容器
- javascript - 如何向每个节点添加 div 内容以在 d3 树布局中显示一些点击信息
- c++ - 此类模板的对象创建如何工作?
- azure - 无法从 terraform 0.12 中的模块输出访问列表的所有元素