Skip to main content
 首页 » 编程设计

python之Pandas之从日期列表中获取每个月的最后一个日期

2025年05月04日10zfyouxi

我有一个相当简单的问题,但找不到一个干净的 pandas 解决方案。

给定如下一系列日期列表:

LoadedDate 
0   2016-02-18 
1   2016-02-19 
2   2016-02-20 
3   2016-02-23 
4   2016-02-24 
5   2016-02-25 
6   2016-02-26 
7   2016-02-27 
8   2016-03-01 
9   2016-03-02 
10  2016-03-03 
11  2016-03-04 
12  2016-03-05 
13  2016-03-08 
14  2016-03-09 
15  2016-03-10 
16  2016-03-11 
17  2016-03-12 
18  2016-03-15 
19  2016-03-16 
20  2016-03-17 
21  2016-03-18 
22  2016-03-19 
23  2016-03-22 
24  2016-03-23 
25  2016-03-24 
26  2016-03-25 
27  2016-03-30 
28  2016-03-31 
29  2016-04-01 
30  2016-04-02 
31  2016-04-05 
32  2016-04-06 
33  2016-04-07 
34  2016-04-08 
35  2016-04-09 
36  2016-04-12 
37  2016-04-13 
38  2016-04-14 
39  2016-04-15 
40  2016-04-16 
41  2016-04-19 
42  2016-04-20 
43  2016-04-21 
44  2016-04-22 
45  2016-04-23 
46  2016-04-27 
47  2016-04-28 
48  2016-04-29 
49  2016-04-30 
50  2016-05-02 
51  2016-05-03 
52  2016-05-04 

我想提取每个月的最后一个/最大日期。所以输出将是:

LastDate 
0   2016-02-27 
1   2016-03-31 
2   2016-04-29 
3   2016-05-04 

我尝试了 df.set_index('LoadedDate').groupby(pd.Grouper(freq='M')).max() 但它返回了最大日历日期,而不是实际的最大我的系列的加载日期。

谢谢。

请您参考如下方法:

你可以使用

In [300]: df.groupby(df.LoadedDate.astype('datetime64[M]')).last().reset_index(drop=True) 
Out[300]: 
  LoadedDate 
0 2016-02-27 
1 2016-03-31 
2 2016-04-30 
3 2016-05-04 

或者,

In [295]: df.groupby(df.LoadedDate - pd.offsets.MonthEnd()).last().reset_index(drop=True) 
Out[295]: 
  LoadedDate 
0 2016-02-27 
1 2016-03-31 
2 2016-04-30 
3 2016-05-04 

或者,

In [301]: df.groupby(df.LoadedDate.dt.to_period('M')).last().reset_index(drop=True) 
Out[301]: 
  LoadedDate 
0 2016-02-27 
1 2016-03-31 
2 2016-04-30 
3 2016-05-04 

或者,

In [303]: df.groupby(df.LoadedDate.astype(str).str[:7]).last().reset_index(drop=True) 
Out[303]: 
  LoadedDate 
0 2016-02-27 
1 2016-03-31 
2 2016-04-30 
3 2016-05-04 

如果日期没有排序。使用上述任何方法使用 idxmax 和 loc

In [307]: df.loc[df.groupby(df.LoadedDate.astype(str).str[:7]).LoadedDate.idxmax().values] 
Out[307]: 
   LoadedDate 
7  2016-02-27 
28 2016-03-31 
49 2016-04-30 
52 2016-05-04