首页 > 解决方案 > 在 Pandas 数据框中查找最后可用日期

问题描述

假设我有一个 Pandas DataFrame,如下所示:

+------------+-------+
|    Date    | Price |
+------------+-------+
| 01/01/2021 |    10 |
| 01/02/2021 |    20 |
| 01/03/2021 |    30 |
| 01/05/2021 |    40 |
| 01/08/2021 |    20 |
| 01/09/2021 |    10 |
+------------+-------+

可以使用以下代码生成上述数据帧:

df = pd.DataFrame({'Date': ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-05', '2021-01-08', '2021-01-09'],
                   'Price': [10, 20, 30, 40, 20, 10]})
df['Date'] = pd.to_datetime(df['Date'])

现在给定一个存储在变量中的日期end_date。第一步是查找日期是否存在于数据框中。可以使用以下代码完成:

if end_date in df.Date.values:
    pass
else:
    # find last available date.

在数据框中找到最后一个可用日期的最优雅的方法是什么。

例如,如果end_date = '2021-01-10'。由于它在数据框中不存在,我希望end_date将值设置为2021-01-09. 同样,如果end_date = 2021-01-07我想end_date将值设置为2021-01-05.

或者 ifend_date = 2021-01-08 end_date不会被覆盖并保持原样 ie end_date = 2021-01-08

标签: pythonpandasdatetime

解决方案


您可以尝试使用locand iloc

end_date = "2021-01-07"
print(df.loc[df['Date'] <= end_date, 'Date'].iloc[-1].date())

输出:

2021-01-05

或者:

end_date = "2021-01-07"
print(df.loc[df['Date'] <= end_date, 'Date'].max().date())

推荐阅读