繁体   English   中英

Python Pandas:将日期时间列分组为小时和分钟聚合

[英]Python Pandas: Group datetime column into hour and minute aggregations

这似乎是相当直截了当的,但几乎一整天后我还没有找到解决方案。 我已经用 read_csv 加载了我的 dataframe 并轻松解析、组合并将日期和时间列索引到一列中,但现在我希望能够根据小时和分钟分组进行整形和执行计算,类似于您可以在excel pivot。

我知道如何重新采样到小时或分钟,但它维护与每个小时/分钟相关的日期部分,而我只想将数据集聚合到小时和分钟,类似于 excel 枢轴中的分组并选择“小时”和“分钟”但是不选择其他任何东西。

任何帮助将不胜感激。

你不能这样做,其中df是你的数据帧:

times = pd.to_datetime(df.timestamp_col)
df.groupby([times.hour, times.minute]).value_col.sum()

Wes 的代码对我不起作用。 但是 DatetimeIndex 函数( docs )做了:

times = pd.DatetimeIndex(data.datetime_col)
grouped = df.groupby([times.hour, times.minute])

DatetimeIndex 对象是 Pandas 中时间的表示。 第一行创建一个日期时间数组。 第二行使用此数组获取所有行的小时和分钟数据,允许按这些值对数据进行分组 ( docs )。

当我搜索这种类型的 groupby 时遇到了这个。 Wes 上面的代码对我不起作用,不确定是不是因为pandas随着时间的推移发生了变化。

pandas 0.16.2 ,我最后做的是:

grp = data.groupby(by=[data.datetime_col.map(lambda x : (x.hour, x.minute))])
grp.count()

你有 (hour, minute) 元组作为分组索引。 如果你想要多索引:

grp = data.groupby(by=[data.datetime_col.map(lambda x : x.hour),
                       data.datetime_col.map(lambda x : x.minute)])

我有上面的 Wes & Nix 答案的替代方案,只需一行代码,假设您的列已经是日期时间列,您不需要分别获取小时和分钟属性:

df.groupby(df.timestamp_col.dt.time).value_col.sum()

这可能有点晚了,但我为任何有同样问题的人找到了一个很好的解决方案。 我有一个这样的df:

datetime              value
2022-06-28 13:28:08   15
2022-06-28 13:28:09   30
...                   ...
2022-06-28 14:29:11   20
2022-06-28 14:29:12   10

我想将那些以秒为间隔的时间戳转换为以分钟为间隔的时间戳,并在过程中添加值列。 有一种简洁的方法:

df['datetime'] = pd.to_datetime(df['datetime']) #if not already as datetime object
grouped = df.groupby(pd.Grouper(key='datetime', axis=0, freq='T')).sum()
print(grouped.head())

结果:

datetime              value
2022-06-28 13:28:00   45
...                   ...
2022-06-28 14:29:00   30

freq='T' 代表分钟。 您也可以按小时或天对它进行分组。 它们被称为偏移别名

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM