我需要更新vid
或可能基于change
列创建一个新列df = [{'vid': 14, 'change': 0}, {'vid': 15, 'change': 1}, {'vid': 16, 'change': 0}, {'vid': 16, 'change': 0}, {'vid': 17, 'change': 0}, {'vid': 17, 'change': 1}, {'vid': 18, 'change': 0}, {'vid': 18, 'change': 0}]
vid change
0 14 0
1 15 1
2 16 0
3 16 0
4 17 0
5 17 1
6 18 0
7 18 0
如果
change == 1
,则下一个vid集应更改为当前,而如果change == 0
,则下一个vid应保持不变。从我上面的示例中,vid 15需要更改为15,因为15更改= 1,但是17停留了,因为16没有更改= 1
仅当vid将在下一行更改时,才会发生Change = 1
预期产量
vid change
0 14 0
1 15 1
2 15 0
3 15 0
4 17 0
5 17 1
6 17 0
7 17 0
最佳答案
如果您不介意将所有替换的数字重新编号为连续的,则可以通过减去更改的shift
ed cumsum
来获得非常干净的版本:
In [59]: df['new_vid'] = df['vid'] - df['change'].shift(fill_value=0).cumsum()
In [60]: df
Out[60]:
vid change new_vid
0 14 0 14
1 15 1 15
2 16 0 15
3 16 0 15
4 17 0 16
5 17 1 16
6 18 0 16
7 18 0 16
带有原始编号的另一个选项是使用
map
和groupby
:In [81]: df['vid'] = df['vid'] - df['vid'].map(df.groupby("vid")['change'].max().shift(fill_value=0))
In [82]: df
Out[82]:
vid change
0 14 0
1 15 1
2 15 0
3 15 0
4 17 0
5 17 1
6 17 0
7 17 0
关于python - 根据其他列条件更新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58841747/