我有以下dataframe:
A B
2021-05-19 07:00:00 Nan Nan
2021-05-19 07:30:00 0.00 Nan
2021-05-19 08:00:00 0.00 Nan
2021-05-19 08:30:00 0.00 Nan
2021-05-19 09:00:00 19.91 Nan
2021-05-19 09:30:00 0.11 Nan
2021-05-19 10:00:00 0.00 Nan
2021-05-19 10:30:00 22.99 Nan
2021-05-19 11:00:00 0.00 Nan
要求:
A B
2021-05-19 07:00:00 Nan 0.00
2021-05-19 07:30:00 0.00 0.00
2021-05-19 08:00:00 0.00 0.00
2021-05-19 08:30:00 0.00 0.00
2021-05-19 09:00:00 19.91 3.32
2021-05-19 09:30:00 0.11 2.78
2021-05-19 10:00:00 0.00 2.32
2021-05-19 10:30:00 22.99 5.76
2021-05-19 11:00:00 0.00 4.80
B列的计算:
B1 = A1
B2 = ((B1*5)+A2)/6
B3 = ((B2*5)+A3)/6
B4 = ((B3*5)+A4)/6
etc.
我已经尝试过在Python中使用shift函数进行计算,但这不起作用,如果有人能在正确的方向上帮助我,那就太好了。
4条答案
按热度按时间xqnpmsa81#
我们可以定义一个函数
fast_sum
来执行所需的计算,然后使用称为即时编译的技术,将此函数编译为机器代码,以便它可以以类似C
的速度更有效地运行。对
90000
行的示例 Dataframe 进行性能测试eufgjt7s2#
您可以遍历DataFrame并设置列
B
,因为B
的每个值都取决于它自己以前的值。eoxn13cs3#
通过一些数学运算,我们可以将这个递归公式转化为如下的几何级数:
它相当于
其中window是
expanding
,对应于代码中的s
。然而,在代码中,我们将A_1
与其他值相加,从而从中取1/6
;所以我们把剩余的5/6
相加,因此前面是(5/6)^N
(而不是N-1
);我们还将A
中的NaN
s设置为0,以防止它们传播。得到
0yg35tkg4#
如果你想表达功能
你的转变方向是正确的
但是,如果要表达递归函数
然后你不能使用向量化的pandas操作,只能使用普通的Python代码来计算,正如另一个答案所指出的那样。