在熊猫中使用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
进行date
like 列,然后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