我想知道如何在對df執行rolling時忽略NaN。
例如,給定一個df,對列a執行滾動,但忽略Nan。這個要求應該產生一些東西
a avg
0 6772.0 7508.00[/span
1 7182.0 8400.50
2 8570.0 9049.60
3 11078.0 10380.40
4 11646.0 11180.00[/span
5 13426.0 12050.00
6 NaN NaN
7 17514.0 19350.00
8 18408.0 20142.50
9 22128.0 20142.50[/span
10 22520.0 21018.67[/span
11 NaN NaN
12 26164.0 27796.67
13 26590.0 21627.25
14 30636.0 23735.00
15 3119.0 25457.00[/span
16 32166.0 25173.75[/span].
17 34774.0 23353.00[/span
但是,我不知道這一行的哪一部分應該被調整以獲得上述預期的輸出
df['a'/span>]。 rolling(2 * w 1, center=True, min_periods=1).mean()
目前,以下代碼
import numpy as np
import pandas as pd
arr=[[6772], [7182], [8570], [11078],[11646],[13426], [np. nan],[17514],[18408] 。
[22128], [22520], [np. nan],[26164],[26590],[30636] 。 [3119], [32166], [34774]]
df=pd.DataFrame(arr,columns=['a'])
w = 2 2
df['avg'] = df['a'] 。 rolling(2 * w 1, center=True, min_periods=1).mean()
產生的結果如下,
a avg
0 6772.0 7508.00
1 7182.0 8400.50
2 8570.0 9049.60
3 11078.0 10380.40
4 11646.0 11180.00[/span
5 13426.0 13416.00<<<
6 NaN 15248.50 <<<
7 17514.0 17869.00 <<<
8 18408.0 20142.50
9 22128.0 20142.50[/span
10 22520.0 22305.00<<<
11 NaN 24350.50 <<<
12 26164.0 26477.50 <<<
13 26590.0 21627.2514 30636.0 23735.00
15 3119.0 25457.00[/span
16 32166.0 25173.75[/span].
17 34774.0 23353.00[/span
<<<表示數值與預期輸出不同的地方
更新:
添加fillna
df['avg'] = df['a'].fillna(value=0)。 rolling(2 * w 1, center=True, min_periods=1).mean()
沒有產生預期的輸出
a avg
0 6772.0 7508.00[/span
1 7182.0 8400.50
2 8570.0 9049.60
3 11078.0 10380.40
4 11646.0 8944.00[/span
5 13426.0 10732.80
6 NaN 12198.80
7 17514.0 14295.20
8 18408.0 16114.00
9 22128.0 16114.00[/span
10 22520.0 17844.00[/span
11 NaN 19480.40
12 26164.0 21182.00
13 26590.0 17301.80[/span
14 30636.0 23735.00
15 3119.0 25457.00[/span
16 32166.0 25173.75[/span].
17 34774.0 23353.00[/span
12050=sum(11078 11646 13426 )/3
uj5u.com熱心網友回復:
IIUC,當nan被滿足時,你想重新啟動滾動。一種方法是使用pandas.DataFrame.groupby:
m = df.isna().any(1)
df["avg"] = (df["a"].groupby(m.cumsum()
.rolling(2 * w 1, center=True, min_periods=1) .mean()
.reset_index(level=0, drop=True)
df["avg"/span>] = df["avg"/span>][~m]
輸出:
a avg
0 6772.0 7508.000000
1 7182.0 8400.500000
2 8570.0 9049.600000
3 11078.0 10380.400000[/span
4 11646.0 11180.000000[/span].
5 13426.0 12050.000000[/span].
6 NaN NaN
7 17514.0 19350.000000
8 18408.0 20142.500000
9 22128.0 20142.500000[/span]。
10 22520.0 21018.666667[/span].
11 NaN NaN
12 26164.0 27796.66666713 26590.0 21627.25000014 30636.0 23735.000000
15 3119.0 25457.000000[/span].
16 32166.0 25173.750000[/span
17 34774.0 23353.000000[/span
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332430.html
標籤:
下一篇:合并兩個多指標資料框架
