代码之家  ›  专栏  ›  技术社区  ›  nilsinelabore

在python中按日期和和值对非唯一datetime列进行分组

  •  1
  • nilsinelabore  · 技术社区  · 4 年前

    我有数据框 df 如下所示:

             start_time                 end_time        count
    0   2020-02-03 08:42:21.997 2020-02-03 09:34:18.737 3116
    1   2020-02-03 09:34:18.837 2020-02-03 10:16:56.583 2557
    2   2020-02-03 10:17:00.480 2020-02-03 13:18:51.540 10911
    3   2020-02-03 13:18:51.640 2020-02-03 14:01:23.263 2551
    4   2020-02-03 14:01:23.363 2020-02-03 14:43:56.977 255
    

    我想按 date 只有 start_time 列和总和全部对应 count 同一天的值。我从中找到了一个相关的答案 post

    使用此方法:

    data.groupby(data.date.dt.year)
    

    但是,我收到了错误消息:

    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-46-7618d5285bb9> in <module>()
          1 
    ----> 2 df.groupby(df.date.dt.year)      # Adding ['start_time'] will return 'AttributeError: 'Series' object has no attribute 'date''.
          3 
          4 
          5 
    
    /usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in __getattr__(self, name)
       5177             if self._info_axis._can_hold_identifiers_and_holds_name(name):
       5178                 return self[name]
    -> 5179             return object.__getattribute__(self, name)
       5180 
       5181     def __setattr__(self, name, value):
    
    AttributeError: 'DataFrame' object has no attribute 'date'
    
    

    问题是什么以及如何将这些非唯一日期时间值分组到 开始时间 按列 仅限日期


    编辑:

    import datetime 
    df['date'] = df['start_time'].dt.date       # Group by 'date' of 'datetime' column
    df.groupby('date').sum()                    # Sum
    

    但我想知道我是否可以直接做,可能是更直接的事情,如前面文章中的答案所示的一行。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Fish11    4 年前

    非常接近, datetime.dt.date 是如何访问datetime对象的日期药水( https://www.geeksforgeeks.org/python-pandas-series-dt-date/ ). 尝试:

    data.groupby(data["start_time"].dt.date)["count"].sum()