在熊猫中使用if条件逐列求和

我很抱歉,但我不太会说话,所以我只会举例说明我在寻找什么。

ID    date1   date2   date3   date4   date5   date6
001   0       5       10      15      5       40
002   0       20      50      0       10      15
003   5       15      5       30      10      0

如果我有这个商品价格数据框,有没有办法逐列求和并应用 if 条件并更新数据框中的值?(例如,如果 sum < 10 则返回相同数量,如果 sum >= 10 则返回 2x 数量,如果 >= 50 则返回 3x 数量)

我想得到这个数据框作为结果:

ID    date1   date2   date3   date4   date5   date6
001   0       5       20      30      10      120
002   0       40      150     0       30      45
003   5       30      10      90      30      0
    

在 ID 000 的情况下,date2 保持不变,因为它小于 10,但 date3 是 10x2,因为总金额是 5+10,即 > 10,因此返回两倍的金额,date4 和 date5 也是如此,但 date6 是 x3。

回答

您可以对这些列filter进行datelike 列,然后cumsum在这些列上axis=1使用 ,最后使用np.select指定的条件和相应的选项来获得最终结果:

s = df.filter(like='date')
cs = s.cumsum(1) # cummulative sum along axis=1
df[s.columns] = np.select([cs.ge(50), cs.ge(10)], [s*3, s*2], s)

    ID  date1  date2  date3  date4  date5  date6
0  001      0      5     20     30     10    120
1  002      0     40    150      0     30     45
2  003      5     30     10     90     30      0


以上是在熊猫中使用if条件逐列求和的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>