如何在一段时间内使用pandas groupby来查找同一时间​​段内多年来的平均计数

我已经进行了广泛的搜索,但还没有找到这样做的好方法。我有一个带有我自己的短信数据的 Pandas 数据框。它有“utctime”、“sender”、“recipient”和“message”列。我想要做的是按任意分钟时间段(例如 10 或 20 分钟)对其进行分组,然后在多年内查看我在一天中每个时间段发送的消息量。


数据的前几行看起来像这样,这又延长了 2 年:


                        utctime  sender   recipient     message

0 2016-11-25 18:00:25.877000+00:00  Person1  Me            message1

1 2016-11-25 18:50:58.694000+00:00  Person2  Me            message2

2 2016-11-25 18:54:41.871000+00:00  Me       Person2       message3

3 2016-11-25 18:54:58.583000+00:00  Person2  Me            message4

4 2016-11-25 19:01:19.694000+00:00  Me       Person2       message5

这样做的最佳方法是什么,以便我可以从 00:00 到 23:40 以 20 分钟为增量查看自己的短信频率?


到目前为止,我所做的是将时间折叠为一天的另一个功能:


def time_of_day(data, tz_info):

    utctime = data.utctime.dt.tz_convert(tz_info)

    data['timeofday'] = pd.to_datetime({'year': 2017,

                                        'month': 1,

                                        'day': 1,

                                        'hour': utctime.dt.hour,

                                        'minute': utctime.dt.minute,

                                        'second': utctime.dt.second})


    return data

然后我使用自定义石斑鱼分组:


sf = pytz.timezone('US/Pacific')

timedelta = '10min'

grouper = pd.Grouper(key='timeofday', freq=timedelta)

data = time_of_day(data, sf) # data is returned in time of day for tz


freq = data.groupby(grouper).count()

有没有更好的方法来做到这一点?


白衣染霜花
浏览 212回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python