python - 熊猫插值保持原始索引
问题描述
我在索引不连续的系列中做一些熊猫插值。所以它可以是这样的:
Value Customer_id
0. 5 A
1. np.nan A
10. 9 A
11. 10 B
12. np.nan B
13. 30 B
我在插值时考虑了 customer_id(在这种情况下没有区别,但我的数据框在客户的起点或终点有 NaN)
所以我在做
series = series.groupby('Customer_id').apply(lambda group: group.interpolate(method= interpolation_method))
其中 interpolation_method 是 'cubic' 或 'index' (我正在测试两者。用于不同的目的)。
如果可能的话,我如何进行插值并将原始索引保留在列或索引中,以便我可以与其他数据帧连接?
解决方案
您可以使用 定义自己的插值函数np.polyfit
。假设您有这个客户A
开始的数据框na
:
Value Customer_id
0 NaN A
1 5.0 A
10 9.0 A
11 10.0 B
12 NaN B
13 30.0 B
用自定义插值填充缺失值:
def interpolate(group):
x = group.dropna()
params = np.polyfit(x.index, x['Value'], deg=1)
predicted = np.polyval(params, group.index)
s = pd.Series(predicted, index=group.index)
return group['Value'].combine_first(s)
df.groupby('Customer_id').apply(interpolate).to_frame().reset_index(level=0)
结果:
Customer_id Value
0 A 4.555556
1 A 5.000000
10 A 9.000000
11 B 10.000000
12 B 20.000000
13 B 30.000000
这假设Value
每个客户至少有 2 个有效。
推荐阅读
- excel - Excel Office 365 VBA - 数据透视表 - 锁定的字段和筛选器列表
- sql-server - 如何使用 VBA 将 Excel 中的范围加载到 MSSQL
- python - Django 的@property 有什么作用?
- mql4 - 我的智能交易系统不起作用。问题出在我认为的 if 块上
- templates - puppet - ruby 模板 - 来自生成的接口名称的 IP 地址
- flutter - Flutter 中的 MultiMap
- python - 如何在 hstacking 后将 ndarray 切片,回到原始片段
- reactjs - 反应 useCallback 而不是 useEffect 动画
- python - “DevToolsActivePort 文件不存在错误”,而我尝试处理 chrome 扩展问题
- css - 部署时字体未加载