首页 > 解决方案 > 用熊猫中的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

如果我有这个项目价格数据框,有没有办法逐列求和并应用条件并更新数据框中的值?(例如,如果 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。

标签: python-3.xpandas

解决方案


您可以点filterdate列然后将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

推荐阅读