python - 根据其他列值生成列
问题描述
我有一个数据框:
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 .
谢谢
解决方案
尝试这个 :
df['new_weight'] = df.groupby('date_1').apply(lambda grp:
5000 - grp.weight_1.where(grp.isBooked.eq(1), 0).cumsum()).reset_index(level=0, drop=True)
推荐阅读
- javascript - mapStateToProps 应该异步更新道具吗?
- android - 如何在 Docker 容器中运行 emulator64-arm?
- powershell - 删除特定 OU 中的过期帐户
- python - 具有单个堆栈的二叉树的迭代后序遍历,如何解决这个问题?
- unit-testing - 使用 Mocha Chai 和 Enzyme 对 onClick 方法进行单元测试时遇到问题
- ios - 以编程方式使用“首选大标题”折叠和展开 UINavigationBar
- docker - 使用 kubernetes 扩展 cron 架构
- android - 任何想法如何为音频录制按钮创建优雅的涟漪效果 - 就像在 Google Keep 中一样
- python - 如何在 PyQt 的单元格中居中图像?
- javascript - Javascript 测验 - 获取选定的单选按钮值并比较正确答案