首页 > 解决方案 > 在子集上结合 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

标签: pythonpandas

解决方案


单程,

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

推荐阅读