【问题标题】:How to obtain difference of a date column in groupby如何在groupby中获取日期列的差异
【发布时间】:2020-09-29 01:56:21
【问题描述】:

目前我的数据如下:

user_ID order_number    order_start_date    order_value week_day
237 135950  1594878.0   2018-01-01  534.0   Monday
235 32911   1594942.0   2018-01-01  89.0    Monday
232 208474  1594891.0   2018-01-01  85.0    Monday
231 9048    1594700.0   2018-01-01  224.0   Monday
228 134896  1594633.0   2018-01-01  449.0   Monday

我想要实现的是按 user_ID 对记录进行分组,并取每个日期的最小值和最大值的差异,并找出它们之间的差异天数。我在哪里挣扎:

  • Groupby 本身并不支持最小最大差异
  • 不能对作为数据帧中的列存在的日期时间序列执行数值运算,例如 mean()。虽然可能适用于单个系列。 有什么帮助吗?

【问题讨论】:

    标签: python pandas datetime group-by


    【解决方案1】:

    我觉得你的描述实际上是伪代码!

    output = df.groupby('user_ID')['order_start_date'].apply(lambda g: g.max()-g.min())
    

    然后您可以将天数的差异作为数字(而不是 timedeltas):

    output = [i / pd.Timedelta(days=1) for i in output]
    

    您的示例数据的输出全部为 0,因为每个用户只有一个条目,这是您所期望的吗?

    至于取平均值,您只需将日期表示为一段时间以来的秒数,然后取平均值。我从很久以前就尝试将所有转换为timedeltas 然后平均,但this post 做得更好并且与groupby 配合得很好。这是一个测试场景,其中一个用户 ID 的所有数据和日期从 2020 年 1 月 1 日到 1 月 5 日:

    df.loc[:,'user_ID'] = 1111
    df['order_start_date'] = pd.date_range('01-01-2020','01-05-2020',periods=5)
    df['order_start_date'] = np.array(df['order_start_date'],dtype='datetime64[s]').view('i8')
    output = df.groupby('user_ID')['order_start_date'].mean().astype('datetime64[s]')
    

    结果:

    user_ID
    1111   2020-01-03
    

    【讨论】:

    • !这正是我所期待的!非常感谢,不确定 min() 和 max() 函数是否适用于日期。
    • 只是好奇你会如何计算日期的平均值?
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多