使用Python将当前行的最后n行替换为组中的当前行值

问题描述

现有数据:

enter image description here

Category    Timestamp   Feat1   Feat2   Indicator
AA  01-02-2018 06:10    21  22  
AA  02-02-2018 06:10    22  6   
AA  03-02-2018 06:10    26  27  
AA  07-02-2018 06:10    27  22  
AA  08-02-2018 06:10    13  19  
AA  09-02-2018 06:10    20  9   1
AA  10-02-2018 06:10    9   17  
XX  04-02-2018 06:10    21  22  
XX  05-02-2018 06:10    22  6   
XX  06-02-2018 06:10    26  27  
XX  07-02-2018 06:10    27  22  1
XX  08-02-2018 06:10    13  19  
XX  09-02-2018 06:10    20  9   
XX  10-02-2018 06:10    9   17  

必需的输出:(使用分组依据替换当前行值(如果等于1)的最后3行)

Category    Timestamp   Feat1   Feat2   Indicator   Indicator (required)
AA  01-02-2018 06:10    21  22      
AA  02-02-2018 06:10    22  6       
AA  03-02-2018 06:10    26  27      1
AA  07-02-2018 06:10    27  22      1
AA  08-02-2018 06:10    13  19      1
AA  09-02-2018 06:10    20  9   1   1
AA  10-02-2018 06:10    9   17      
XX  04-02-2018 06:10    21  22      1
XX  05-02-2018 06:10    22  6       1
XX  06-02-2018 06:10    26  27      1
XX  07-02-2018 06:10    27  22  1   1
XX  08-02-2018 06:10    13  19      
XX  09-02-2018 06:10    20  9       
XX  10-02-2018 06:10    9   17      

enter image description here

解决方法

GroupBy.bfilllimit参数一起使用:

#if necessary
df['Indicator'] = df['Indicator'].replace('',np.nan)

df['Indicator1'] = df.groupby('Category')['Indicator'].bfill(limit=3)
print (df)
   Category         Timestamp  Feat1  Feat2  Indicator  Indicator1
0        AA  01-02-2018 06:10     21     22        NaN         NaN
1        AA  02-02-2018 06:10     22      6        NaN         NaN
2        AA  03-02-2018 06:10     26     27        NaN         1.0
3        AA  07-02-2018 06:10     27     22        NaN         1.0
4        AA  08-02-2018 06:10     13     19        NaN         1.0
5        AA  09-02-2018 06:10     20      9        1.0         1.0
6        AA  10-02-2018 06:10      9     17        NaN         NaN
7        XX  04-02-2018 06:10     21     22        NaN         1.0
8        XX  05-02-2018 06:10     22      6        NaN         1.0
9        XX  06-02-2018 06:10     26     27        NaN         1.0
10       XX  07-02-2018 06:10     27     22        1.0         1.0
11       XX  08-02-2018 06:10     13     19        NaN         NaN
12       XX  09-02-2018 06:10     20      9        NaN         NaN
13       XX  10-02-2018 06:10      9     17        NaN         NaN

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...