python - Python - Pandas:如何在呈指数增长的值之间进行插值?
问题描述
我有一个熊猫系列,其中包含产品的价格演变(我的国家通货膨胀率很高),或者说,某个国家的冠状病毒感染人数。这两个数据集中的值都呈指数增长;这意味着如果您有类似 [3, NaN, 27] 的内容,您需要进行插值,以便在这种情况下用 9 填充缺失值。我检查了 Pandas 文档中的插值方法,但除非我遗漏了什么,否则我没有找到任何关于这种插值类型的信息。
我可以手动完成,您只需取几何平均值,或者在更多值的情况下,通过 (最终值/初始值)^(1/它们之间的距离) 获得平均增长率,然后相应地相乘。但是我的系列中有很多值要填写,那么我该如何自动完成呢?我想我错过了一些东西,因为这似乎是非常基本的东西。
谢谢你。
解决方案
您可以取系列的对数,线性插值,然后将其转换回指数比例。
import pandas as pd
import numpy as np
arr = np.exp(np.arange(1,10))
arr = pd.Series(arr)
arr[3] = None
0 2.718282
1 7.389056
2 20.085537
3 NaN
4 148.413159
5 403.428793
6 1096.633158
7 2980.957987
8 8103.083928
dtype: float64
arr = np.log(arr) # Transform according to assumed process.
arr = arr.interpolate('linear') # Interpolate.
np.exp(arr) # Invert previous transformation.
0 2.718282
1 7.389056
2 20.085537
3 54.598150
4 148.413159
5 403.428793
6 1096.633158
7 2980.957987
8 8103.083928
dtype: float64
推荐阅读
- javascript - 在 Mapbox 中单击时获取标记的 ID
- python - 如何对对象的 JSON 对象进行非规范化?
- c# - 使用 MS Graph 通过 Sharepoint 读取 Excel 内容
- c# - AviReader - getNext
- javascript - sweetalert 2 确认无法取消
- python - 为什么 Python 中的这段代码比 C++ 中的代码快得多?
- image-recognition - 解决编程难题
- java - 在 Json 中映射具有公共属性和动态名称的数组
- python - 运行具有 scipy 分布的 RandomizedSearchCV 时出现“溢出错误:Python int 太大而无法转换为 C long”
- common-lisp - 简单算术函数中无法访问的代码