我正在处理以下数据框:
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
我想创建一个新列,例如s,它从 0 开始并继续。这个新列基于“p”列,每当 p 更改时,“s”也应该更改。
对于前 4 行,“p”= 11,因此前 4 行的“s”列的值应为 0,依此类推...
以下是预期的 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
最佳答案
您需要 diff
和 cumsum
(如果您希望 id 从 0 开始,则减一):
df["finalID"] = (df.ProjID.diff() != 0).cumsum()
df
更新,如果您想同时考虑voyg_id和ProjID,您可以使用OR两列差异的条件,这样无论哪一列发生变化,最终的 id 都会增加。
df['final_id'] = ((df.voyg_id.diff() != 0) | (df.proj_id.diff() != 0)).cumsum()
df
关于python - 根据其他列的值在 pandas 中创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43124833/