【问题标题】:Converting minutes data to hourly data将分钟数据转换为每小时数据
【发布时间】:2021-09-19 17:31:23
【问题描述】:

我有一个数据框,其中包含以 5 分钟的时间间隔记录的数千个唯一 ID 和值。数据很大,因为它包含数千个唯一 ID 的每日数据。数据示例如下:

sample_data.csv

datetime,           Unique_id,   Value
2018-01-28 00:00:00, 105714,      409
2018-01-28 00:05:00, 105714,      409
2018-01-28 00:10:00, 105714,      242
2018-01-28 00:15:00, 105714,      225
....................  .......     ...
2018-01-28 23:55:00, 105714,      225
2018-01-28 00:00:00, 206714,      325
2018-01-28 00:05:00, 206714,      325
2018-01-28 00:10:00, 206714       238
....................  .......     ...
2018-01-28 23:55:00, 206714,      410
  • 我正在尝试将 5 分钟数据转换为每小时数据,同时以小时为单位汇总最后一列 (VALUE) 的值。
  • unique_id 值在转换为小时时应该相同(它们不应相加)。

我尝试通过以下方式将分钟转换为小时:

pd.to_datetime(df.datetime, unit='m').dt.strftime('%H:%M')

但我不确定如何以小时为单位并行实现最后一列 (VALUE) 的聚合值。

Expected output

datetime,           Unique_id,   Value
2018-01-28 01(hours):00(minutes), 105714,      Sum of 5 minute values in one hour
2018-01-28 02(hours):00(minutes), 105714,      Sum of 5 minute values in one hour

【问题讨论】:

    标签: python pandas dataframe datetime group-by


    【解决方案1】:

    使用Grouper 按小时聚合,列Unique_id by sum:

    df['datetime'] = pd.to_datetime(df['datetime'])
    df = df.groupby([pd.Grouper(freq='H', key='datetime'), 'Unique_id']).sum().reset_index()
    print (df)
                 datetime  Unique_id  Value
    0 2018-01-28 00:00:00     105714   1285
    1 2018-01-28 00:00:00     206714    888
    2 2018-01-28 23:00:00     105714    225
    3 2018-01-28 23:00:00     206714    410
    

    【讨论】:

      【解决方案2】:

      简单的 groupby + sum,使用四舍五入(实际上是底)到小时的时间:

      >>> df.groupby([
      ...     df['datetime'].transform(pd.to_datetime).dt.floor(freq='1h'),
      ...     'Unique_id',
      ... ]).sum().reset_index()
                   datetime  Unique_id   Value
      0 2018-01-28 00:00:00     105714  1285.0
      1 2018-01-28 00:00:00     206714   888.0
      2 2018-01-28 23:00:00     105714   225.0
      3 2018-01-28 23:00:00     206714   410.0
      

      请注意,如果您的列已经是 datetime dtype,.transform(pd.to_datetime) 是可选的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 2020-06-11
        • 2019-02-22
        • 1970-01-01
        相关资源
        最近更新 更多