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'