python - 带有衰减的 Pandas 数据帧前向填充
问题描述
我正在运行 Python 3.5 和 Pandas v 0.19.2。我有一个如下所示的数据框。向前填充缺失值是直截了当的。
import pandas as pd
import numpy as np
d = {'A': np.array([10, np.nan, np.nan, -3, np.nan, 4, np.nan, 0]),
'B': np.array([np.nan, np.nan, 5, -3, np.nan, np.nan, 0, np.nan ])}
df = pd.DataFrame(d)
df_filled = df.fillna(axis='index', method='ffill')
print(df_filled)
Out[8]:
A B
0 10.0 NaN
1 10.0 NaN
2 10.0 5.0
3 -3.0 -3.0
4 -3.0 -3.0
5 4.0 -3.0
6 4.0 0.0
7 0.0 0.0
我的问题是:用衰减实现前向填充的最佳方法是什么?我理解pd.ffill()
并且pd.fillna()
不支持这个。例如,我所追求的输出如下(与上面的常规 ffill 相比),其中每个周期的值都减半:
Out[5]:
A B
0 10.0 NaN
1 5.0 NaN
2 2.5 5.0
3 -3.0 -3.0
4 -1.5 -1.5
5 4.0 -0.75
6 2.0 0.0
7 0.0 0.0
解决方案
是的,没有简单的方法可以做到这一点。我建议一次做一列,使用groupby
and apply
。
for c in df:
df[c] = df[c].groupby(df[c].notnull().cumsum()).apply(
lambda y: y.ffill() / 2 ** np.arange(len(y))
)
df
A B
0 10.0 NaN
1 5.0 NaN
2 2.5 5.00
3 -3.0 -3.00
4 -1.5 -1.50
5 4.0 -0.75
6 2.0 0.00
7 0.0 0.00
推荐阅读
- mysql - withCount() - 获得 2 个计数的差值
- php - 如何使用 REST API 为 WooCommerce 产品指定产品图像排序顺序?
- python - Pyinstaller 生成空 dist 文件夹
- javascript - 在 React Native 上调节按钮
- python - 将多个 Vega/vincent 图表添加到 Folium 弹出窗口
- django - 如何使用视图从 PostGIS 中提取几何图形,然后使用 Django 将其添加到模板中的传单地图中
- node.js - 猫鼬聚合不返回最新文档
- python - 使用 pydrive 从 google 共享驱动器下载文件,文件存在,但 API 返回 404 File not found 错误
- javascript - 测试从AngularJS中另一个方法的return语句调用一个方法的次数
- javascript - Jquery字符串不显示