Python 获取满足特定条件的最后一次观察的日期

Python 获取满足特定条件的最后一次观察的日期,python,pandas,dataframe,Python,Pandas,Dataframe,给定以下数据帧 Firm Date Work_day 0 1 2016-11-17 1.0 1 1 2016-11-18 1.0 2 1 2016-11-19 0.0 3 1 2016-11-20 0.0 4 1 2016-11-21 1.0 5 1 2016-11-22 1.

给定以下数据帧

    Firm     Date         Work_day
0   1        2016-11-17   1.0      
1   1        2016-11-18   1.0      
2   1        2016-11-19   0.0      
3   1        2016-11-20   0.0     
4   1        2016-11-21   1.0      
5   1        2016-11-22   1.0      
6   2        2016-12-21   0.0      
7   2        2016-12-22   1.0      
8   2        2016-12-23   0.0      
9   2        2016-12-24   0.0     

我如何才能添加以下列“Last_working_day”(最后一个工作日),它只是当前日期(如果
Work_day==1
),或者给出最后一个obs的日期。“工作日”值为
1.0
(此处工作日是工作日的虚拟变量)的各公司的。因此,生成的表如下所示

    Firm     Date         Work_day Last_working_day
0   1        2016-11-17   1.0      2016-11-17
1   1        2016-11-18   1.0      2016-11-18
2   1        2016-11-19   0.0      2016-11-18
3   1        2016-11-20   0.0      2016-11-18
4   1        2016-11-21   1.0      2016-11-21
5   1        2016-11-22   1.0      2016-11-22
6   2        2016-12-21   0.0      NaN
7   2        2016-12-22   1.0      2016-12-22
8   2        2016-12-23   0.0      2016-12-22
9   2        2016-12-24   0.0      2016-12-22


非常感谢

如果
0
中的
Work\u day
中的
0和最后一次通话中的


如果
0
中的
Work\u day
中的
0
与最后一次通话一起,则用mssing值替换日期时间:


我们使用
Series.where
将所有日期转换为
NaN
where
Work\u day=0

然后我们使用
GroupBy.ffill
来填补每家公司的空缺

df['Last_working_day'] = df['Date'].where(df['Work_day'].eq(1))
df['Last_working_day'] = df.groupby('Firm')['Last_working_day'].ffill()

   Firm        Date  Work_day Last_working_day
0     1  2016-11-17       1.0       2016-11-17
1     1  2016-11-18       1.0       2016-11-18
2     1  2016-11-19       0.0       2016-11-18
3     1  2016-11-20       0.0       2016-11-18
4     1  2016-11-21       1.0       2016-11-21
5     1  2016-11-22       1.0       2016-11-22
6     2  2016-12-21       0.0              NaN
7     2  2016-12-22       1.0       2016-12-22
8     2  2016-12-23       0.0       2016-12-22
9     2  2016-12-24       0.0       2016-12-22
请注意,
Date
必须按升序排序(在本例中为升序),否则应提前排序:

df = df.sort_values('Date')

我们使用
Series.where
将所有日期转换为
NaN
where
Work\u day=0

然后我们使用
GroupBy.ffill
来填补每家公司的空缺

df['Last_working_day'] = df['Date'].where(df['Work_day'].eq(1))
df['Last_working_day'] = df.groupby('Firm')['Last_working_day'].ffill()

   Firm        Date  Work_day Last_working_day
0     1  2016-11-17       1.0       2016-11-17
1     1  2016-11-18       1.0       2016-11-18
2     1  2016-11-19       0.0       2016-11-18
3     1  2016-11-20       0.0       2016-11-18
4     1  2016-11-21       1.0       2016-11-21
5     1  2016-11-22       1.0       2016-11-22
6     2  2016-12-21       0.0              NaN
7     2  2016-12-22       1.0       2016-12-22
8     2  2016-12-23       0.0       2016-12-22
9     2  2016-12-24       0.0       2016-12-22
请注意,
Date
必须按升序排序(在本例中为升序),否则应提前排序:

df = df.sort_values('Date')