Python 为特定观察量填充填充物/填充物
我有以下数据帧:Python 为特定观察量填充填充物/填充物,python,pandas,Python,Pandas,我有以下数据帧: id indicator 1 NaN 1 NaN 1 1 1 NaN 1 NaN 1 NaN 实际上,我还有几个ID。我现在的问题是,如何对特定范围进行正向或反向填充,例如仅对下一个/最后两个观测值进行填充。我的数据框应该如下所示: id indicator 1 NaN 1 NaN 1
id indicator
1 NaN
1 NaN
1 1
1 NaN
1 NaN
1 NaN
实际上,我还有几个ID。我现在的问题是,如何对特定范围进行正向或反向填充,例如仅对下一个/最后两个观测值进行填充。我的数据框应该如下所示:
id indicator
1 NaN
1 NaN
1 1
1 1
1 1
1 NaN
我知道命令
df.groupby("id")["indicator"].fillna(value=None, method="ffill")
但是,这将填充所有缺少的值,而不仅仅是接下来的两个观察值。有人知道解决办法吗?差不多了,
直接从医生那里
如果指定了方法,则这是要向前/向后填充的连续NaN值的最大数目。换言之,如果存在超过此数量的连续NAN的缺口,则只能部分填补。如果未指定方法,则这是沿整个轴填充NAN的最大条目数。如果不是无,则必须大于0
我认为或使用限制
参数更好:
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
尽管OP未指定此方法,但此方法可能会产生从一个
id
填充到下一个的意外结果。OP可能仅用于填充同一id
中的值。
#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