Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为特定观察量填充填充物/填充物_Python_Pandas - Fatal编程技术网

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