将数据分组到30分钟的箱中

时间:2019-01-22 13:31:44

标签: python pandas dataframe

我有一个包含一些数据的.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

谢谢!

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