3 回答

TA貢獻1829條經驗 獲得超7個贊
可以使用rolling.sum2 的窗口大小:
(df.diff()/df.rolling(2).sum()).eval('abs(Quantity/Price)')
0 NaN
1 8.0
dtype: float64

TA貢獻1818條經驗 獲得超11個贊
基本上你已經有了diff然后你已經有兩排sum
由于diff: x[2]-x[1] Then 'sum' : x[2]+x[1]=x[2]*2-(x[2]-x[1])
在您的情況下,總和可以通過以下方式計算
df*2-df.diff()
Out[714]:
Price Quantity
0 NaN NaN
1 96.0 9.0
所以輸出是
(df.diff()/(df*2-df.diff())).eval('abs(Quantity/Price)')
Out[718]:
0 NaN
1 8.0
dtype: float64

TA貢獻1804條經驗 獲得超8個贊
對于小數據幀,使用.eval()
效率不高。
以下在某些100.000
行上速度更快:
df = (df.diff() / df.rolling(2).sum()).div(2)
df['result'] = abs(df.Quantity / df.Price)
32.9 ms ± 1.05 ms
每個循環(mean ± std. dev. of 7 runs, 10 loops each)
與 39.6 ms ± 931 μs
每個循環(mean ± std. dev. of 7 runs, 10 loops each)
添加回答
舉報