Pandas:基于另一列增加或重置计数

2024-10-02 12:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pandas数据帧,代表一系列的分数。我想使用该分数根据以下标准计算CookiePoints列:

  • 每次分数与之前的分数相比有所提高,就会得到CookiePoint。在
  • 每次分数没有提高,所有的CookiePoints都会被取消作为惩罚(CookiePoints设置为0)。在
  • 3个烹饪点可以换成一个饼干。因此,达到3后,CookiePoints计数应该是1(如果分数更高)或0(如果分数不高)。在

示例如下:

Score       CookiePoints
14          0
13          0
14          1
17          2
17          0
19          1
20          2
22          3
23          1
17          0
19          1
20          2
22          3
21          0

注意这是一个minimal, reproducible example。解决方案必须使用Pandas数据帧,理想情况下只使用矢量化操作。在


Tags: 数据示例pandas标准example代表解决方案分数
1条回答
网友
1楼 · 发布于 2024-10-02 12:23:53

这当然是一个棘手的问题,但仍有可能在熊猫体内解决。(更新V3解决方案)

版本3(OneLiner)

score = pd.Series([14,13,14,17,17,19,20,22,23,17,19,20,22,21])
result = score.diff().gt(0).pipe(lambda x:x.groupby((~x).cumsum()).cumsum().mod(3).replace(0,3).where(x,0).map(int))

版本2

^{pr2}$

版本1

^{3}$

相关问题 更多 >

    热门问题