python - 在子集上结合 ne(0)、查找和回填
问题描述
我有一个数据框,我需要在其中计算特定字段的第一个非零出现,识别另一个字段中的相应值,然后用该值回填一个新字段。
举个例子更容易。我有前三列,我需要将“报告列”作为“损失”列非零(始终为零)的第一个日期。
Claim | Loss | Date | Reported
-------------------------------------------
A | 0 | 2019-01-01 | 2019-03-01
A | 0 | 2019-02-01 | 2019-03-01
A | 500 | 2019-03-01 | 2019-03-01
A | 500 | 2019-04-01 | 2019-03-01
-----------------------------------------------
B | 0 | 2019-01-01 | 2019-04-01
B | 0 | 2019-02-01 | 2019-04-01
B | 0 | 2019-03-01 | 2019-04-01
B | 500 | 2019-04-01 | 2019-04-01
解决方案
单程,
df = df.sort_values(['Claim', 'Date'])
df['Reported'] = df.assign(Reported=df['Date'].mask(df['Loss'] == 0)).groupby('Claim')['Reported'].transform('first')
df
输出:
Claim Loss Date Reported
1 A 0.0 2019-01-01 2019-03-01
2 A 0.0 2019-02-01 2019-03-01
3 A 500.0 2019-03-01 2019-03-01
4 A 500.0 2019-04-01 2019-03-01
6 B 0.0 2019-01-01 2019-04-01
7 B 0.0 2019-02-01 2019-04-01
8 B 0.0 2019-03-01 2019-04-01
9 B 500.0 2019-04-01 2019-04-01
推荐阅读
- mysql - UPDATE query involving the results of 2 seperate SELECT statements from same table
- loops - 验证 ID
- docker - docker-compose 无法访问数据库端口
- vb.net - 将数组添加到图表仅绘制第一个值
- javascript - 角材料表单元格格式
- c# - 无法从 C# 中的 DB Null 或其他类型转换对象
- amazon-web-services - 如何在 aws 中订阅长轮询队列?我没有在队列操作中看到“订阅队列到 sns 通知”按钮
- python - Python BeautifulSoup - 抓取 Div Spans 和 p 标签 - 以及如何在 div 名称上获得完全匹配
- java - Firebase 禁用新用户注册
- javascript - Power BI 分阶段嵌入预加载事件类型错误异常