Python 用相同的值替换特定列的以下n行值

Python 用相同的值替换特定列的以下n行值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个这样的数据框 df col1 col2 1 D 2 A 3 H 4 K 5 G 6 A 7 K 8 H 9 B 10 S 现在,如果col2值是A,那么用A填充接下来的两行(我们可以更改数字) 所以结果会是 df col1 col2 1 D 2 A 3 A 4 A 5

我有一个这样的数据框

df
col1    col2
 1       D
 2       A
 3       H
 4       K
 5       G
 6       A
 7       K
 8       H
 9       B
10       S
现在,如果col2值是A,那么用A填充接下来的两行(我们可以更改数字) 所以结果会是

df
col1    col2
 1       D
 2       A
 3       A
 4       A
 5       G
 6       A
 7       A
 8       A
 9       B
10       S

我可以使用for循环来实现这一点,并将一个循环与另一个循环进行比较。但执行时间会更长。因此,我正在寻找一些快捷方式/pythonic方法来有效地执行此操作。

您可以尝试将
ffill
limit=2
fillna
结合使用

df['new_col2'] = df.col2.where(df.col2.eq('A')).ffill(limit=2).fillna(df.col2)

Out[164]:
   col1 col2 new_col2
0     1    D        D
1     2    A        A
2     3    H        A
3     4    K        A
4     5    G        G
5     6    A        A
6     7    K        A
7     8    H        A
8     9    B        B
9    10    S        S
limit=2
一起使用和。最后我们使用 完成这些值​​不属于A且不在限制范围内的

df['col2'] = df['col2'].where(df['col2'].eq('A')).ffill(limit=2).fillna(df['col2'])
输出

   col1 col2 new_col2
0     1    D        D
1     2    A        A
2     3    H        A
3     4    K        A
4     5    G        G
5     6    A        A
6     7    K        A
7     8    H        A
8     9    B        B
9    10    S        S
我们也可以使用


将记录的位置设施(索引)与“行切片”一起使用。
df.loc[df['col2'].eq('A').rolling(3, min_periods=0).max().astype(bool),'col2'] = 'A'