我有一个数据集,其中一列A的值表示得分。
我想计算一列B,以便我可以看到得分与上一行相等或更高的持续时间。
如果该值较低,则将此行中列B的值设置为0。
我尝试了以下方法:
df = pd.DataFrame({'A': [140, 145,148, 150, 100, 105, 106]})
df['B'] = 0
df.loc[df['A'].diff() >= 0, 'B'] = df['B'].shift() + 1
结果如下。
A B
0 140 0.0
1 145 1.0
2 148 1.0
3 150 1.0
4 100 0.0
5 105 1.0
6 106 1.0
我知道这个条件是对每一行进行检查,但不幸的是似乎是一起计算的,所以它没有像预期的那样增加值B,因为在对每一行进行计算时,上一行的.shift()
的值仍然为0。
我该如何才能得到以下结果?
A B
0 140 0
1 145 1
2 148 2
3 150 3
4 100 0
5 105 1
6 106 2
m = df.A.diff().ge(0); df['B'] = m.cumsum() - m.cumsum().where(~m).ffill()
- Andy L.