如果我有一个像下面这样的自定义日期列表(但它可以是任意的日期):
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日。这将是我的列表中的第一天和最后一天。
发布于 2019-04-24 19:57:14
创建一个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
#...
发布于 2019-04-24 20:17:47
我会使用grouper,并将每月的最小日期和最大日期分开。
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
https://stackoverflow.com/questions/55837479
复制相似问题