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