【问题标题】:How to group by the last date in a month in pandas如何在熊猫中按一个月的最后一个日期分组
【发布时间】:2021-11-20 12:38:23
【问题描述】:

我有一个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 分组,然后只选择date 的最后日期的值,但我认为首先删除不需要的数据更有效。

我尝试使用:

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

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

【问题讨论】:

  • 日期列是什么类型的?字符串还是时间日期?
  • 是日期时间,我事先用df.date = pd.to_datetime(df.date)

标签: python pandas group-by


【解决方案1】:

你可以使用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'))]

输出:

   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

【讨论】:

    猜你喜欢
    • 2023-02-16
    • 2016-06-24
    • 2020-08-18
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多