F_Date B_Date col is_B
01/09/2019 02/08/2019 2200 1
01/09/2019 03/08/2019 672 1
02/09/2019 03/08/2019 1828 1
01/09/2019 04/08/2019 503 0
02/09/2019 04/08/2019 829 1
03/09/2019 04/08/2019 1367 0
02/09/2019 05/08/2019 559 1
03/09/2019 05/08/2019 922 1
04/09/2019 05/08/2019 1519 0
01/09/2019 06/08/2019 376 1
我想生成一列c_a
,这样对于航班日期的第一个条目,最初的值是25000
,并根据col值减小。例如:
预期输出:
F_Date B_Date col is_B c_a
01/09/2019 02/08/2019 2200 1 25000
01/09/2019 03/08/2019 672 1 25000 - 2200
02/09/2019 03/08/2019 1828 1 25000
01/09/2019 04/08/2019 503 0 25000 - 2200 - 672
02/09/2019 04/08/2019 829 1 25000 - 1828
03/09/2019 04/08/2019 1367 0 25000
02/09/2019 05/08/2019 559 1 25000 - 1828 - 829
03/09/2019 05/08/2019 922 1 25000 (since last value had is_B as 0)
04/09/2019 05/08/2019 1519 0 25000
01/09/2019 06/08/2019 376 1 25000 - 2200 - 672 (Since last appearance had is_B as 0)
有人能找出一种方法来达到同样的效果吗?你知道吗
我想,我找到了一个非常简洁的解决方案:
结果是:
这个想法,以小组F_Date=='01/09/2019'为例:
grp.col.where(grp.is_B.eq(1), 0)
-要从中减去的值 组中下一行:.shift(fill_value=0)
-从电流中减去的值 组中的行:.cumsum()
-要减去的累积值:25000 - ...
-目标值:不错的熊猫游戏:)
让我们一步一步地看一下:
这就是我得到的结果
使用
shift
、cumsum
和ffill
尝试groupby相关问题 更多 >
编程相关推荐