我有以下数据框:
id indicator
1 NaN
1 NaN
1 1
1 NaN
1 NaN
1 NaN
Run Code Online (Sandbox Code Playgroud)
实际上,我还有几个 id。我现在的问题是,如何对特定范围进行向前或向后填充,例如仅对下一个/最后 2 个观察进行填充。我的数据框应该是这样的:
id indicator
1 NaN
1 NaN
1 1
1 1
1 1
1 NaN
Run Code Online (Sandbox Code Playgroud)
我知道命令
df.groupby("id")["indicator"].fillna(value=None, method="ffill")
Run Code Online (Sandbox Code Playgroud)
但是,这会填充所有缺失值,而不仅仅是接下来的两个观察值。有谁知道解决方案?
我认为DataFrameGroupBy.ffill或DataFrameGroupBy.bfill带limit参数更好:
df.groupby("id")["indicator"].ffill(limit=3)
df.groupby("id")["indicator"].bfill(limit=3)
Run Code Online (Sandbox Code Playgroud)
样本:
#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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3989 次 |
| 最近记录: |