【问题标题】:group by pandas dataframe and select next upcoming date in each group按熊猫数据框分组并在每组中选择下一个即将到来的日期
【发布时间】:2021-03-13 16:37:27
【问题描述】:

与此处相同的问题:group by pandas dataframe and select latest in each group,除了希望获得每个组的下一个即将到来的日期,而不是最新日期。

所以给定一个按日期排序的数据框:

 id     product  date
0   220    6647     2020-09-01 
1   220    6647     2020-10-03 
2   220    6647     2020-12-16
3   826    3380     2020-11-11
4   826    3380     2020-12-09
5   826    3380     2021-05-19
6   901    4555     2020-09-01
7   901    4555     2020-12-01
8   901    4555     2021-11-01

使用今天的日期 (2020-12-01) 确定下一个即将到来的日期,按 id 或产品分组并选择下一个即将到来的日期应该给出:

    id     product   date
2   220    6647     2020-12-16
5   826    3380     2020-12-09
8   901    4555     2021-11-01

【问题讨论】:

    标签: python pandas datetime pandas-groupby


    【解决方案1】:

    先过滤日期,然后删除重复项:

    df[df['date']>'2020-12-01'].sort_values(['id','date']).drop_duplicates('id')
    

    输出:

        id  product        date
    2  220     6647  2020-12-16
    4  826     3380  2020-12-09
    8  901     4555  2021-11-01
    

    【讨论】:

    • 谢谢。可以不用硬编码今天的日期吗?
    • 使用pd.Timestamp.now().normalize() 而不是硬编码。确保您的 date 列是日期时间类型。
    • 这似乎不起作用。使用硬编码或使用 pd.timestamp.now().normalize()。没有错误,只是没有删除重复项
    • 您忘记分配回来了吗?
    • 是的!解决了它。谢谢。应该注意 -- df[df['date']>'2020-12-01'].sort_values(['id','date']).drop_duplicates('id') -- 将删除任何具有日期列中的空白字段。我可以解决这个问题,但只是想提醒一下查看此页面的其他人。
    猜你喜欢
    • 2017-05-22
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多