Python 熊猫基于上一行仅为每组设置一次值

Python 熊猫基于上一行仅为每组设置一次值,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样的df: id date target 1 1.1 1 1 2.1 0 2 1.1 1 3 1.1 1 3 2.1 0 我想更改target列,如果在前一行中其显示为“1”且与id相同,则只将下一行更改为1 期望输出: id date target 1 1.1 1 1 2.1 1 2 1.1 1 3 1.1 1 3 2.

我有这样的
df

id  date  target
1      1.1    1
1      2.1    0
2      1.1    1
3      1.1    1 
3      2.1    0
我想更改
target
列,如果在前一行中其显示为“1”且与
id
相同,则只将下一行更改为1

期望输出:

id    date target
1      1.1    1
1      2.1    1
2      1.1    1
3      1.1    1 
3      2.1    1
我尝试的是:

def change_df(frame):
    for row in range(frame.shape[0]) :
        if frame["target"][row]==1 and frame.loc[row+1,"id"]==frame.loc[row,"id"] :
                frame.loc[row+1,"target"]=1
    return frame
但它会更改所有行(因为循环)
TNX

您可以
id
上的数据帧进行分组
,然后
shift
target
并将其与
1
进行比较以创建布尔掩码,然后使用此掩码的布尔索引将
target
列中的值更新为
1

m = df.groupby('id')['target'].shift().eq(1)
df.loc[m, 'target'] = 1

>>> df

   id  date  target
0   1   1.1       1
1   1   2.1       1
2   2   1.1       1
3   3   1.1       1
4   3   2.1       1