我有一个包含一些数据的.csv文件。此文件中只有一列,其中包括时间戳。我需要将数据整理成30分钟的时间段。这是我的数据:
Timestamp
04/01/2019 11:03
05/01/2019 16:30
06/01/2019 13:19
08/01/2019 13:53
09/01/2019 13:43
因此,在这种情况下,最后两个数据点将在包含13:30到14:00的所有数据的bin中分组在一起。
这是我已经尝试过的
df = pd.read_csv('book.csv')
df['Timestamp'] = pd.to_datetime(df.Timestamp)
df.groupby(pd.Grouper(key='Timestamp',
freq='30min')).count().dropna()
我得到了大约7000行,显示了整天的所有小时,旁边是计数,就像这样:
2019-09-01 03:00:00 0
2019-09-01 03:30:00 0
2019-09-01 04:00:00 0
...
我只想为数据集中的小时创建垃圾箱。我想看到这样的东西:
Time Count
11:00:00 1
13:00:00 1
13:30:00 2 (we have two data points in this interval)
16:30:00 1
谢谢!
答案 0 :(得分:3)
将groupby.size
用作:
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df = df.Timestamp.dt.floor('30min').dt.time.to_frame()\
.groupby('Timestamp').size()\
.reset_index(name='Count')
或根据jpp
的建议:
df = df.Timestamp.dt.floor('30min').dt.time.value_counts().reset_index(name='Count')
print(df)
Timestamp Count
0 11:00:00 1
1 13:00:00 1
2 13:30:00 2
3 16:30:00 1