如何仅按小时汇总熊猫日期时间轴系列

时间:2019-04-11 08:55:47

标签: python pandas date datetime timeline

我有一个包含时间对象和分数的熊猫时间表:

          datetime   score
2018-11-23 08:33:02      4
2018-11-24 09:43:30      2
2018-11-25 08:21:34      5
2018-11-26 19:33:01      4
2018-11-23 08:50:40      1
2018-11-23 09:03:10      3

我想按小时汇总分数,而不考虑日期,所需结果是:

08:00:00        10
09:00:00        5
19:00:00        4

所以基本上我必须删除日期-月份-年份,然后按小时分组分数

我尝试了此命令

monthagg = df['score'].resample('H').sum().to_frame()

哪个可以工作,但要考虑日期-月份-年份,如何删除DD-MM-YYYY并按小时进行汇总?

3 个答案:

答案 0 :(得分:2)

设置生成带有日期时间对象的框架:

import datetime
import pandas as pd

rows = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(100)]
df = pd.DataFrame(rows,columns = ["date"])

您现在可以像这样添加一个小时列,然后按其分组:

df["hour"] = df["date"].dt.hour
df.groupby("hour").sum()

答案 1 :(得分:2)

一种可能的解决方案是使用DatetimeIndex.floor将分钟和秒设置为0,然后通过DatetimeIndex.strftimeDatetimeIndex转换为字符串,然后聚合sum:< / p>

a = df['score'].groupby(df.index.floor('H').strftime('%H:%M:%S')).sum()
#if column datetime
#a = df['score'].groupby(df['datetime'].dt.floor('H').dt.strftime('%H:%M:%S')).sum()
print (a)
08:00:00    10
09:00:00     5
19:00:00     4
Name: score, dtype: int64

或使用DatetimeIndex.hour并汇总sum

a = df.groupby(df.index.hour)['score'].sum()
#if column datetime
#a = df.groupby(df['datetime'].dt.hour)['score'].sum()
print (a)
datetime
8     10
9      5
19     4
Name: score, dtype: int64

答案 2 :(得分:1)

import pandas as pd
df = pd.DataFrame({'datetime':['2018-11-23 08:33:02 ','2018-11-24 09:43:30',
                               '2018-11-25 08:21:34',
                               '2018-11-26 19:33:01','2018-11-23 08:50:40',
                               '2018-11-23 09:03:10'],'score':[4,2,5,4,1,3]})
df['datetime']=pd.to_datetime(df['datetime'], errors='coerce')
df["hour"] = df["datetime"].dt.hour
df.groupby("hour").sum()

输出:

8   10
9   5
19  4