76

这似乎是相当直截了当的,但几乎一整天后我还没有找到解决方案。我已经用 read_csv 加载了我的数据框,并且很容易将日期和时间列解析、组合和索引到一列中,但现在我希望能够根据小时和分钟分组来重塑和执行计算,类似于你可以在excel支点。

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

任何帮助将不胜感激。

4

4 回答 4

68

你不能,df你的DataFrame在哪里:

times = pd.to_datetime(df.timestamp_col)
df.groupby([times.dt.hour, times.dt.minute]).value_col.sum()
于 2013-04-28T18:36:18.093 回答
51

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

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

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

于 2015-09-03T03:00:52.813 回答
20

当我在搜索这种类型的 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)])
于 2015-08-18T08:10:47.937 回答
6

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

df.groupby(df.timestamp_col.dt.time).value_col.sum()
于 2020-01-29T15:41:52.230 回答