【问题标题】:Using groupby or pivot_tables to transform a dataframe使用 groupby 和数据透视表来转换数据框
【发布时间】:2020-08-18 23:35:21
【问题描述】:

我有一个包含时间戳(每小时)的数据框,该数据框应按每 5 行分组,以及每小时的降雨量。这种情况下的问题是一些应该组合在一起的时间戳具有不同的日期,因为一些时间戳超过了午夜。我的原创df

           Datum            HH  DayPrecipitation
9137    2016-01-16 18:00:00 18  0
9138    2016-01-16 19:00:00 19  6
9139    2016-01-16 20:00:00 20  0
...         ...             ... ...
44874   2020-02-13 19:00:00 19  0
44875   2020-02-13 20:00:00 20  0
44878   2020-02-13 23:00:00 23  0

我想要这样的宽幅格式:

其中时间戳 1-5 是前一个的每 5 行,值来自 df['DayPrecipitation']

       Datum               timestamp1   timestamp2 ... timestamp 5
    2016-01-16                  0            6              0
    2020-02-13                  0            0              0

我不知道该怎么做,因为按日期分组不会给我需要的结果,但我不知道每 5 行分组一次。 帮助将不胜感激!谢谢!

【问题讨论】:

    标签: python pandas datetime group-by pivot-table


    【解决方案1】:

    我会首先以'5H' 的频率重新采样数据帧。然后添加 2 列:一列用于日期,一列用于时间戳,即小时除(整数除法)除以 5。从那时起,pivot 将给出预期的数据帧。

    我在这里假设Datum 列包含真正的时间戳。如果它包含其他类型,则必须使用df['Datum'] = pd.to_datetime(df['Datum']) 进行更改。代码可能是:

    df5 = df[['Datum', 'DayPrecipitation']].resample('5H', on='Datum').sum().reset_index()
    df5['timestamp'] = df5['Datum'].dt.hour // 5
    df5['Datum'] = df5['Datum'].dt.date
    resul = df5.pivot('Datum', 'timestamp', 'DayPrecipitation')
    

    但是每 5 天只有 4 个时间戳,所以第 5 个将是 NaN 值。

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      相关资源
      最近更新 更多