繁体   English   中英

如何按pandas中一个月的最后一个日期分组

[英]How to group by the last date in a month in pandas

我有一个df

qty         val         date
10          100         2021-09-15
11          111         2021-09-22
20          222         2021-09-22
35          333         2021-09-15
45          444         2021-10-15
79          555         2021-10-15
79          555         2021-10-07
87          666         2021-11-15
45          777         2021-11-15
97          888         2021-11-22

我试图按每个月的max(date)对值进行分组,因此我只会采用2021-09-22 / 2021-10-15 / 2021-11-22的值,因为这些日期是每个日期中最高的月。 我希望在groupby期间获得这些日期的qty & val的总和。 或者只是按date分组,然后 select 只有最后一个日期的值date ,但我认为首先删除不需要的数据效率更高。

我尝试使用:

group = df.groupby('date')
group_max = groups.apply(lambda g: g[g['date'] == g['date'].max()])

但是如果运气不好,我将如何在分组之前或之后进行过滤,以便我只能获得日期中每个月的最后一个date的值?

您可以使用pandas.Grouper

# pre-requisite
df['date'] = pd.to_datetime(df['date'])

g = df.groupby(pd.Grouper(freq='M', key='date'))
df[df['date'].eq(g['date'].transform('max'))]

output:

   qty  val       date
1   11  111 2021-09-22
2   20  222 2021-09-22
4   45  444 2021-10-15
5   79  555 2021-10-15
9   97  888 2021-11-22

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM