我的数据框包含3列,Id,Stage,Status。我想根据条件更改该值:如果对于相同的ID,则更改阶段,然后将状态更改为1.如果发生了相同ID的另一个事件,则阶段仍然相同,然后将状态更改回0。 / p>
谢谢!
答案 0 :(得分:2)
要计算 Period 列,您可以使用两个(嵌套) groupby 来计算结果:
df["Period"] = (df.groupby("ID", group_keys=False)
# use the common diff.cumsum pattern to calculate the group variable here
.apply(lambda g: g.groupby(by = (g.Stage.diff() != 0).cumsum())
.cumcount() * 30))
df
答案 1 :(得分:1)
可以通过以下方式获取状态列:
df.groupby('ID').diff().Stage.fillna(0).ne(0)
Out[86]:
4 False
10 True
0 False
2 True
3 True
5 True
7 False
8 False
9 True
1 False
6 False
Name: Stage, dtype: bool
答案 2 :(得分:0)
您需要对列ID进行排序,然后使用np.where()和df.shift()来查找正确的状态。
df=df.sort_values('ID')
df['Status']=np.where(((df.ID.shift()==df.ID) & (df.Stage.shift()<>df.Stage)),1,0)
输出
ID Stage Status
4 45 2 0
10 45 3 1
0 50 4 0
2 50 5 1
3 50 6 1
5 50 4 1
7 50 4 0
8 50 4 0
9 50 5 1
1 55 3 0
6 55 3 0