根据日期时间索引

时间:2018-06-01 19:15:44

标签: python-3.x pandas date datetime dataframe

我有一个大小的数据框(43817,6)。我通过以下代码创建了一个由过去两个月组成的较小数据框:

test_df = df1.last('3M')

我之所以选择' 3M'是由于我在第3个月的第一个月运行代码。 df中的索引是datetimeindex。

以下示例数据:

                   Scheduled_Start_Date    CRQ Change Class 
Scheduled_Start_Date                                                      
2018-05-25 13:00:00   2018-05-25 13:00:00  CRQ000000114908     Standard   
2018-05-25 15:00:00   2018-05-25 15:00:00  CRQ000000115436     Standard   
2018-05-25 15:00:00   2018-05-25 15:00:00  CRQ000000115429     Standard   
2018-05-25 16:00:00   2018-05-25 16:00:00  CRQ000000115491     Standard   
2018-05-25 18:00:00   2018-05-25 18:00:00  CRQ000000115572     Standard   
2018-05-26 17:00:00   2018-05-26 17:00:00  CRQ000000115495    Emergency   
2018-05-29 11:00:00   2018-05-29 11:00:00  CRQ000000115240     Standard   
2018-05-29 21:00:00   2018-05-29 21:00:00  CRQ000000115507    Emergency   
2018-05-31 15:00:00   2018-05-31 15:00:00  CRQ000000115516     Standard   
2018-06-01 05:00:00   2018-06-01 05:00:00  CRQ000000115466     Standard   
2018-06-01 09:00:00   2018-06-01 09:00:00  CRQ000000115085       Normal

我想要做的是获得过去两个月中所有日子的完整视图,无论我何时运行代码,我能想到的唯一方法是删除当前不需要的月份的任何行。 datetimeindex超出两个月的时间。例如,如果我在6/1上运行小数据帧的代码,它将返回6/1的实例,我需要删除它。

是否有更简单的方法从datetimeindex获取最后两个(完整)月份,无论您何时运行代码?

1 个答案:

答案 0 :(得分:0)

您可以从df中删除当前月份数据,然后查找最近2个月。在寻找最近2个月并删除当前月份然后再寻找一个月可能会很乱。:

import datetime as dt
current_month = dt.datetime.today().month
df.drop(df.loc[df.index.month==current_month].index).last('2M')

考虑以下玩具示例:

i = pd.date_range(start='2018-04-01', freq='20D', end='2018-06-30')
df = pd.DataFrame({'A': [1, 10, 3, 4, 5]}, index=i)
print(df)

输出:

            A
2018-04-01  1
2018-04-21  10
2018-05-11  3
2018-05-31  4
2018-06-20  5

然后在查找最近n个月的数据之前删除当前月份数据。

import datetime as dt
current_month = dt.datetime.today().month
df.drop(df.loc[df.index.month==current_month].index).last('2M')

输出:

            A
2018-04-01  1
2018-04-21  10
2018-05-11  3
2018-05-31  4