Python Pandas:将datetime列分组为小时和分钟聚合

时间:2013-04-28 18:07:33

标签: python date pandas

这似乎相当直接,但经过近一整天我还没有找到解决方案。我已经使用read_csv加载了我的数据框,并且很容易解析,组合并将日期和时间列索引到一列中,但现在我希望能够重新整形并根据小时和分钟分组执行计算,类似于您可以执行的操作excel枢轴。

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

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:45)

你不能这样做,df是你的DataFrame:

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

答案 1 :(得分:31)

Wes的代码对我不起作用。但DatetimeIndex函数(docs)确实:

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

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

答案 2 :(得分:13)

当我在寻找这种类型的群体时遇到过这种情况。韦斯'上面的代码对我不起作用,不确定它是否因为pandas随时间的变化而变化。

pandas 0.16.2中,我最终做的是:

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

您有(小时,分钟)元组作为分组索引。如果你想要多索引:

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

答案 3 :(得分:1)

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

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