Python 将一列的值替换为表中其他两列的条件值

Python 将一列的值替换为表中其他两列的条件值,python,pandas,Python,Pandas,我有一个数据帧df: year ID category 1 1 0 2 1 1 3 1 1 4 1 0 1 2 0 2 2 0 3 2 1 4 2 0 我想创建一个新列,以便:对于特定的“年”,如果“类别”为1,“新类别”在未来几年将始终为1: year

我有一个数据帧df:

year ID  category 
1     1    0        
2     1    1        
3     1    1        
4     1    0        
1     2    0        
2     2    0        
3     2    1        
4     2    0        
我想创建一个新列,以便:对于特定的“年”,如果“类别”为1,“新类别”在未来几年将始终为1:

year ID  category new_category
1     1    0        0
2     1    1        1
3     1    1        1
4     1    0        1
1     2    0        0
2     2    0        0
3     2    1        1
4     2    0        1
我尝试了if-else条件,但得到了相同的“category”列

for row in range(1,df.category[i-1]):
    df['new_category'] = df['category'].replace('0',df['category'].shift(1))

但我没有得到所需的列

请尝试:

df['new_category'] = df.groupby('ID')['category'].cummax()
输出:

   year  ID  category  new_category
0     1   1         0             0
1     2   1         1             1
2     3   1         1             1
3     4   1         0             1
4     1   2         0             0
5     2   2         0             0
6     3   2         1             1
7     4   2         0             1
尝试:

输出:

   year  ID  category  new_category
0     1   1         0             0
1     2   1         1             1
2     3   1         1             1
3     4   1         0             1
4     1   2         0             0
5     2   2         0             0
6     3   2         1             1
7     4   2         0             1