Pandas日期相减返回整数及生成0/1时限标识列实现问题
Pandas 日期列相减获取整数天数并生成判断列
核心需求
对两个日期列做减法返回整数结果,用于后续计算列的引用。
原始csv文件名为io,包含三列:ID、CreatedDate、IFSPDate,需要新增两个计算列。
计算列1:Days(日期差列)
最初实现代码如下:
io['CreatedDate'] = pd.to_datetime(io.CreatedDate) io['IFSPDate'] = pd.to_datetime(io.IFSPDate) for ind, row in io.iterrows(): dataset.loc[ind,"Days to Table"] = row['CreatedDate'] - row['IFSPDate']
得到的Days列结果为timedelta格式,示例输出如下:
| ID | CreatedDate | IFSPDate | Days |
|---|---|---|---|
| 1 | 2021-09-17 | 2021-09-17 | 0 days 00:00:00 |
| 2 | 2021-08-05 | 2021-01-13 | 204 days 00:00:00 |
| 3 | 2021-09-03 | 2041-08-31 | 3 days 00:00:00 |
| 4 | 2021-09-16 | 2021-07-27 | 51 days 00:00:00 |
计算列2:Timeliness(时效性判断列)
实现逻辑:如果Days列的数值≤4则返回1,否则返回0。
遇到的问题
现有代码得到的Days列结果不是整数类型,无法直接使用<=运算符判断生成Timeliness列的0/1值。
期望输出结果
| ID | CreatedDate | IFSPDate | Days | Timeliness |
|---|---|---|---|---|
| 1 | 2021-09-17 | 2021-09-17 | 0 | 1 |
| 2 | 2021-08-05 | 2021-01-13 | 204 | 0 |
| 3 | 2021-09-03 | 2041-08-31 | 3 | 1 |
| 4 | 2021-09-16 | 2021-07-27 | 51 | 0 |
已验证解决方案
- 日期相减直接返回整数天数:
io["Days"] = (io["CreatedDate"] - io["IFSPDate"]).dt.days
- 生成0/1判断列(需先导入numpy库):
import numpy as np io["Timeliness"] = np.where(io['Days'] <= 4, '1', '0')
如果需要Timeliness列为整数类型,可修改为:
io["Timeliness"] = np.where(io['Days'] <= 4, 1, 0)
内容的提问来源于stack exchange,提问作者WriteJP
相关产品推荐
相关产品推荐

