Python Pandas:将日期时间列分组为小时和分钟聚合
Posted
技术标签:
【中文标题】Python Pandas:将日期时间列分组为小时和分钟聚合【英文标题】:Python Pandas: Group datetime column into hour and minute aggregations 【发布时间】:2013-04-22 08:58:25 【问题描述】:这似乎很简单,但经过将近一整天的时间,我还没有找到解决方案。我已经用 read_csv 加载了我的数据框,并且很容易将日期和时间列解析、组合和索引到一列中,但现在我希望能够根据小时和分钟分组来重塑和执行计算,类似于你可以在excel支点。
我知道如何重新采样到小时或分钟,但它维护与每个小时/分钟相关的日期部分,而我只想将数据集聚合到小时和分钟,类似于在 excel 数据透视表中分组并选择“小时”和“分钟”,但不选择其他任何内容。
任何帮助将不胜感激。
【问题讨论】:
从您拥有的每个datetime
对象中获取time
对象是否有帮助?您可以从 dataframe.index
创建一个 pandas.Series
对象,然后将其分配给索引(替换当前索引)。你能“打印”你的数据框的一些行吗?
谢谢。如果这就是您的意思,我不熟悉使用时间对象从日期时间列中获取时间。我刚刚找到了一种非常接近我需要的方法,分别使用以下代码每小时和每分钟,但是有没有更简单的方法可以做到这一点,尤其是每小时和每分钟在一起的方法?: hourly = ims_havas.groupby( ims_havas.index.hour).sum()
【参考方案1】:
你不能吗,df
是你的 DataFrame:
times = pd.to_datetime(df.timestamp_col)
df.groupby([times.dt.hour, times.dt.minute]).value_col.sum()
【讨论】:
是的,这对我也很有效,但我有后续问题:如何在 matlibplot 中使用这个“分组时间序列”作为我的 x 轴? 我不得不处理df.groupby([times.dt.hour, times.dt.minute]) ...
这在 Python 3 中有效吗? pd.to_datetime 函数似乎创建了一个 pandas.core.series.Series 对象,但没有任何日期时间功能。我得到“AttributeError:'系列'对象没有属性'小时'”。
@AdrianKeister 它可以工作,你只需要加上前缀 dt。在这种特定情况下,它会像times.dt.hour
,就像@akilat90 所说的那样。【参考方案2】:
我有上面 Wes & Nix 答案的替代方案,只需一行代码,假设您的列已经是日期时间列,您不需要分别获取小时和分钟属性:
df.groupby(df.timestamp_col.dt.time).value_col.sum()
【讨论】:
【参考方案3】:Wes 的代码对我不起作用。但是 DatetimeIndex 函数 (docs) 做到了:
times = pd.DatetimeIndex(data.datetime_col)
grouped = df.groupby([times.hour, times.minute])
DatetimeIndex 对象是 pandas 中时间的表示。第一行创建一个日期时间数组。第二行使用此数组获取所有行的小时和分钟数据,允许按这些值对数据进行分组 (docs)。
【讨论】:
我喜欢你使用另一个 df 进行分组的方式。我会不必要地创建列。【参考方案4】:我在搜索这种类型的 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)])
【讨论】:
以上是关于Python Pandas:将日期时间列分组为小时和分钟聚合的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法用两个日期之间的每小时日期时间有效地填充 python 中的 pandas df 列?
使用 Python,如何按小时对 Dataframe 中的列进行分组?