簡體   English   中英

如何在python中獲取月份列表的第一天和最后一天?

[英]How to get first and last day of a list of months in python?

如果我有一個自定義的日期列表,如下面的那個(但它可以任意天):

from datetime import datetime, timedelta

base = datetime.today()
date_list = [base - timedelta(days=x) for x in range(0, 1000)]

如何從列表中提取每個月/每年的第一個日期並單獨提取列表的最后日期?

我想這樣做的一種方法是,如果我在pandas.Series列出我的列表。然后系列將各自的月份/年份中的日期分組,然后查看每個日期的日期並采取最低(第一個日期)和最高日期一天(最后一次約會)。

我只是不知道該怎么做。

要明確:我試圖在自定義列表中找到該月的第一天/最后一天。 例如,如果我的列表中只有2018年2月15日。 這將是我列表的月份的第一天和最后一天。

創建一個DataFrame然后使用resample來聚合每個月的最大值和最小值。 normalize擺脫了時間部分。

import pandas as pd

(pd.DataFrame(data=pd.to_datetime(date_list).normalize(), index=date_list)
   .resample('MS')[0].agg([min, max]))

#                  min        max
#2016-07-01 2016-07-29 2016-07-31
#2016-08-01 2016-08-01 2016-08-31
#2016-09-01 2016-09-01 2016-09-30
#2016-10-01 2016-10-01 2016-10-31
#2016-11-01 2016-11-01 2016-11-30
#2016-12-01 2016-12-01 2016-12-31
#2017-01-01 2017-01-01 2017-01-31
#2017-02-01 2017-02-01 2017-02-28
#2017-03-01 2017-03-01 2017-03-31
#...

我會使用石斑魚並將每月的最小日期和每月的最大日期分開。

from datetime import datetime, timedelta

base = datetime.today()
date_list = [base - timedelta(days=x) for x in range(0, 35)]

df = pd.DataFrame(date_list, columns=['date_idx'])
df.index = df['date_idx']
df_min = df.groupby(pd.Grouper(freq='M')).agg(np.min).reset_index(drop=True)
df_max = df.groupby(pd.Grouper(freq='M')).agg(np.max).reset_index(drop=True)

print(df_min)
print(df_max)

結果:

                   date_idx
0 2019-03-21 16:16:58.991884
1 2019-04-01 16:16:58.991884

                    date_idx
0 2019-03-31 16:16:58.991884
1 2019-04-24 16:16:58.991884

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM