2017-07-27 57 views
2

具體金額我有以下數據框:大熊貓ffill/bfill爲觀察

id  indicator 
1   NaN 
1   NaN 
1   1 
1   NaN 
1   NaN 
1   NaN 

在現實中,我有幾個IDS。我現在的問題是,如何在特定範圍內進行向前或向後填充,例如只有下一個/最後2個觀測值。我的數據框應該是這樣的:

id  indicator 
1   NaN 
1   NaN 
1   1 
1   1 
1   1 
1   NaN 

我知道命令

df.groupby("id")["indicator"].fillna(value=None, method="ffill")   

然而,這個充滿所有的缺失值,而不是僅僅在接下來的兩個意見。任何人都知道解決方案

回答

3

幾乎沒有, 直從

如果指定方法的文檔,這是連續的NaN值的到向前/向後填充的最大數目。換句話說,如果有超過這個連續NaN數量的差距,它只會被部分填充。如果未指定方法,則這是沿着整個座標軸將填充NaN的最大條目數。如果不是無,則必須大於0。

df.groupby("id")["indicator"].fillna(value=None,method="ffill",limit=3) 
+0

雖然不是由OP指定的,這種方法很可能有意想不到的後果從一個'id'填充值到下一個。 OP可能打算只填寫同一個「id」中的值。 – Alexander

3

我覺得DataFrameGroupBy.ffillDataFrameGroupBy.bfilllimit參數爲更好:

df.groupby("id")["indicator"].ffill(limit=3) 

df.groupby("id")["indicator"].bfill(limit=3) 

樣品:

#5 value is in the end of group, so only one value is filled 
df['filled'] = df.groupby("id")["indicator"].ffill(limit=2) 
print (df) 
    id indicator filled 
0 1  NaN  NaN 
1 1  NaN  NaN 
2 1  1.0  1.0 
3 1  NaN  1.0 
4 1  NaN  1.0 
5 1  NaN  NaN 
6 1  NaN  NaN 
7 1  NaN  NaN 
8 1  4.0  4.0 
9 1  NaN  4.0 
10 1  NaN  4.0 
11 1  NaN  NaN 
12 1  NaN  NaN 
13 2  NaN  NaN 
14 2  NaN  NaN 
15 2  1.0  1.0 
16 2  NaN  1.0 
17 2  NaN  1.0 
18 2  NaN  NaN 
19 2  5.0  5.0 
20 2  NaN  5.0 
21 3  3.0  3.0 
22 3  NaN  3.0 
23 3  NaN  3.0 
24 3  NaN  NaN 
25 3  NaN  NaN