pandas - 插值连续数
问题描述
基于下面的 Pandas DataFrame,有时间(秒)和心率值。尽管“时间”应该是连续数字,但我们看到了一些缺失值。(1、2、4、5、7、9、10 等)在这种情况下,我应该使用 pandas.DataFrame.interpolate 来获得所需的结果吗?或任何其他实现它的好主意?请注意,原始数据来自 API。我试图在网上寻找任何答案,但没有运气......
原来的:
time heartrate
0 97
3 105
6 105
8 111
11 111
13 114
16 115
期望的输出:
time heartrate
0 97
1 100
2 103
3 105
4 105
5 105
6 105
7 109
8 111
9 111
10 111
11 111
12 113
13 114
14 114
15 114
16 115
解决方案
定义time
为 index 然后 reindex withpd.RangeIndex
以获得连续值并进行插值heartrate
:
idx = pd.RangeIndex(df.time.min(), df.time.max()+1, name='time')
out = df.set_index('time').reindex(idx)['heartrate'] \
.interpolate(method='linear') \
.pipe(np.ceil) \
.reset_index()
输出:
>>> out
time heartrate
0 0 97.0
1 1 100.0
2 2 103.0
3 3 105.0
4 4 105.0
5 5 105.0
6 6 105.0
7 7 108.0
8 8 111.0
9 9 111.0
10 10 111.0
11 11 111.0
12 12 113.0
13 13 114.0
14 14 115.0
15 15 115.0
16 16 115.0
结果是不精确的。您必须调整interpolate 方法以获得所需的结果,但原理是相同的。
推荐阅读
- javascript - 如何在JS中的另一个函数中执行一个函数
- java - Android Volley 获取请求,我的 onResponse 永远不会被调用
- azure-devops - Azure DevOps 代码审查电子邮件未列出要审查的文件
- c# - 需要显示具有自定义对齐方式的列表视图项
- wpf - WPF 日历中 PART_HeaderButton 的 NullReferenceException
- python - 如何将关键事件发送到python中的非活动窗口
- java - 执行appium脚本时遇到javapath错误
- python - 作为 groupby 查询的结果,如何从 DF 中删除行?
- php - 如何将此 RewriteRule 重定向到正确的页面?
- elasticsearch - ElasticSearch DSL:也可以查询自定义标签