【问题标题】:Python Pandas Conditional Calculation row by rowPython Pandas条件计算逐行
【发布时间】: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

【问题讨论】:

标签: python pandas row


【解决方案1】:

您需要cumsum 来识别块,并需要groupby().cumcount() 来枚举每个块:

s = df['A'].diff().ge(0)
df['B'] = s.groupby((~s).cumsum()).cumcount()

输出:

     A  B
0  140  0
1  145  1
2  148  2
3  150  3
4  100  0
5  105  1
6  106  2

【讨论】:

  • 非常感谢!这正是我想要的!
猜你喜欢
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
相关资源
最近更新 更多