目的是為了得到一個給定索引行的前n個和后n個的平均值。
對于一個給定的索引,得到的是一個索引串列的平均值。 例如
索引的平均值
0 0, 1, 2
1 0,1,2, 3
2 0,1,2,3,4。
...
9 7,8,9,10,11.
10 8,9,10,11,12
這可以通過以下方式實作:
import pandas as pd
arr=[[6772]。
[7182]。
[8570]。
[11078]。
[11646]。
[13426]。
[16996]。
[17514]。
[18408]。
[22128]。
[22520]。
[23532]。
[26164]。
[26590]。
[30636]。
[3119]。
[32166]。
[34774]]
df=pd.DataFrame(arr,columns=['a'])
df['cal']=0.
idx_c=2
for idx in range(len(df)) 。
idx_l=idx-idx_c
idx_t=idx idx_c
idx_l=0 if idx_l< 0 else idx_l
idx_t=len(df) if idx_t>len(df) else idx_t
df.loc[idx,'cal']=df['a'][df.index.isin(range(idx_l,idx_t 1)].mean()
然而,我想知道是否有更有效的方法來實作上述任務?
uj5u.com熱心網友回復:
Series.rolling
。
這里的訣竅是使用一個滾動視窗,其大小為2*w 1,可選引數為center=True,以將滾動計算的結果居中。例如,如果w=2,那么視窗大小將是2*w 1 = 5,滾動計算的結果將被存盤在3的位置。
w = 2。
df['avg'] = df['a'] 。 rolling(2 * w 1, center=True, min_periods=1).mean()
print(df)
a avg
0 6772 7508.00
1 7182 8400.50
2 8570 9049.60
3 11078 10380.40[/span
4 11646 12343.20
5 13426 14132.006 16996 15598.00
7 17514 17694.40
8 18408 19513.20[/span
9 22128 20820.40
10 22520 22550.40
11 23532 24186.80[/span
12 26164 25888.40[/span
13 26590 22008.2014 30636 23735.0015 3119 25457.00
16 32166 25173.75[/span].
17 34774 23353.00
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326829.html
標籤:
上一篇:如何有效地發送大的字串到javaseleniumtextarea元素中?
下一篇:Mysql查詢限制運行緩慢
