gpt4 book ai didi

python - 根据其他列值生成列

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:14 26 4
gpt4 key购买 nike

我有一个数据框:

Date_1      Date_2     is_B weight_1
01/09/2019 02/08/2019 1 254
01/09/2019 02/08/2019 1 320
01/09/2019 04/08/2019 1 244
01/09/2019 04/08/2019 1 247
01/09/2019 14/08/2019 0 343
01/09/2019 14/08/2019 1 161
01/09/2019 14/08/2019 1 386
01/09/2019 15/08/2019 1 465
01/09/2019 15/08/2019 1 133
01/09/2019 15/08/2019 1 310
01/09/2019 15/08/2019 1 155

我想生成一个 new_weight 列,这样对于每个 date_1,new_weight 的值为 5000 - weight_1,其中 is_B 值为 1。如果 is_B = 0,那么我们将 new_weight 的旧值复制到 new_weight。

我知道要计算 new_weight,我们可以这样做:

df = 5000 - df.groupby('date_1')['weight_1'].cumsum()

但我不确定如何在代码中应用 is_b 的条件。

谁能建议用 pandas 或 numpy 的方式来做同样的事情?

编辑

预期输出

Date_1      Date_2     is_B weight_1  new_weight
01/09/2019 02/08/2019 1 254 5000-254
01/09/2019 02/08/2019 1 320 5000-254-320
01/09/2019 04/08/2019 1 244 5000-254-320-244
01/09/2019 04/08/2019 1 247 5000-254-320-244-247
01/09/2019 14/08/2019 0 343 5000-254-320-244-247(we won't subtract 343 as isBooked = 0)
01/09/2019 14/08/2019 1 161 .
01/09/2019 14/08/2019 1 386 .
01/09/2019 15/08/2019 1 465 .
01/09/2019 15/08/2019 1 133 .
01/09/2019 15/08/2019 1 310 .
01/09/2019 15/08/2019 1 155 .

谢谢

最佳答案

您可以使用 DataFrame.mask + Series.cumsum :

df['new_weight']=5000-(df.mask(df['is_B'].eq(0)).groupby('Date_1')['weight_1'].cumsum()).ffill()
print(df)

        Date_1      Date_2  is_B  weight_1  new_weight
0 01/09/2019 02/08/2019 1 254 4746.0
1 01/09/2019 02/08/2019 1 320 4426.0
2 01/09/2019 04/08/2019 1 244 4182.0
3 01/09/2019 04/08/2019 1 247 3935.0
4 01/09/2019 14/08/2019 0 343 3935.0
5 01/09/2019 14/08/2019 1 161 3774.0
6 01/09/2019 14/08/2019 1 386 3388.0
7 01/09/2019 15/08/2019 1 465 2923.0
8 01/09/2019 15/08/2019 1 133 2790.0
9 01/09/2019 15/08/2019 1 310 2480.0
10 01/09/2019 15/08/2019 1 155 2325.0

关于python - 根据其他列值生成列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58701024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com