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

hor*_*01d 50 python date pandas

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

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

任何帮助将不胜感激.

Wes*_*ney 48

你做不到,df你的DataFrame 在哪里:

times = pd.to_datetime(df.timestamp_col)
df.groupby([times.hour, times.minute]).value_col.sum()
Run Code Online (Sandbox Code Playgroud)

  • 我必须使用`df.groupby([times.dt.hour,times.dt.minute])...` (8认同)
  • 这在Python 3中有用吗?pd.to_datetime函数似乎创建了一个pandas.core.series.Series对象,但没有任何日期时间功能.我得到"AttributeError:'Series'对象没有属性'hour'". (8认同)
  • @AdrianKeister它有效,您只需要加上前缀dt。在这种特定情况下,它将类似于“ times.dt.hour”,如@ akilat90所述。 (5认同)

Nix*_*G-D 36

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

times = pd.DatetimeIndex(data.datetime_col)
grouped = df.groupby([times.hour, times.minute])
Run Code Online (Sandbox Code Playgroud)

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


Wil*_*llZ 15

当我在寻找这种类型的群体时遇到过这种情况.上面的Wes代码对我不起作用,不确定是否因为pandas随着时间的推移而发生变化.

pandas 0.16.2,我最终做的是:

grp = data.groupby(by=[data.datetime_col.map(lambda x : (x.hour, x.minute))])
grp.count()
Run Code Online (Sandbox Code Playgroud)

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

grp = data.groupby(by=[data.datetime_col.map(lambda x : x.hour),
                       data.datetime_col.map(lambda x : x.minute)])
Run Code Online (Sandbox Code Playgroud)


tsa*_*ndo 7

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

df.groupby(df.timestamp_col.dt.time).value_col.sum()
Run Code Online (Sandbox Code Playgroud)