假设我有以下数据帧:
>>> import pandas as pd
>>> df = pd.DataFrame([1,2,4, None, None, None, None, -1, 1, None, None])
>>> df
0
0 1.0
1 3.0
2 4.0
3 NaN
4 NaN
5 NaN
6 NaN
7 -1.0
8 1.0
9 NaN
10 NaN
我想用从上一个值开始的指数衰减来填充缺失的值,给出:
>>> df_result
0
0 1.0
1 2.0
2 4.0
3 4.0 # NaN replaced with previous value
4 2.0 # NaN replaced previous value / 2
5 1.0 # NaN replaced previous value / 2
6 0.5 # NaN replaced previous value / 2
7 -1.0
8 1.0
9 1.0 # NaN replaced previous value
10 0.5 # NaN replaced previous value / 2
有了fillna
,我就有了method='pad'
,但是我不能在这里拟合我的公式。
对于interpolate
,我不确定是否可以给出一个具体的指数衰减公式,并且只考虑最后的not NaN值。你知道吗
我正在考虑创建一个单独的数据帧df_replacements
,用0.5
而不是NaN和其他地方的0
初始化,执行一个cumprod(我需要为每个第一个NaN将正在运行的产品重置为1),然后df_result = df.fillna(df_replacements, inplace=True)
有没有一个简单的方法来取代熊猫?你知道吗
在您的例子中,填充nan向前,然后我们
groupby
找到连续的NaN
,得到cumcount
按OP编辑:使用更显式变量名的相同解决方案:
相关问题 更多 >
编程相关推荐