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
whereWork\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
whereWork\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')