我正在处理以下数据:
p q
0 11 2
1 11 2
2 11 2
3 11 3
4 11 3
5 12 2
6 12 2
7 13 2
8 13 2 我想要创建一个新的列,比如的,它从0开始,然后继续。这个新的值是以"p“列为基础的,每当p发生变化时,"s”也会发生变化。
对于前4行,"p“= 11,so "s”列的值应为前4行,依此类推.
下面是预期的df:
s p q
0 0 11 2
1 0 11 2
2 0 11 2
3 0 11 2
4 1 11 4
5 1 11 4
6 1 11 4
7 1 11 4
8 2 12 2
9 2 12 2
10 2 12 2
11 3 12 3
12 3 12 3 发布于 2017-03-30 17:44:36
您需要diff和cumsum (如果您希望id从0开始,则减去一个):
df["finalID"] = (df.ProjID.diff() != 0).cumsum()
df

Update,如果要同时考虑voyg_id和ProjID,可以对两列差异使用OR条件,这样无论哪一列更改,最终id都会增加。
df['final_id'] = ((df.voyg_id.diff() != 0) | (df.proj_id.diff() != 0)).cumsum()
df

https://stackoverflow.com/questions/43124833
复制相似问题