【发布时间】:2020-06-12 19:37:25
【问题描述】:
我有一个数据集,其中 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,因为在计算每一行时,行的值 - 1 .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
【问题讨论】:
-
我想出了类似于@G.Anderson 链接的解决方案。所以,这个问题有资格重复:
m = df.A.diff().ge(0); df['B'] = m.cumsum() - m.cumsum().where(~m).ffill()