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

标签 python pandas

我进行了广泛的搜索,但还没有找到一个好的方法来做到这一点。我有一个带有我自己的短信数据的 pandas 数据框。它有“utctime”、“发件人”、“收件人”和“消息”列。我想做的是将其按任意分钟时间段(例如 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()

有更好的方法吗?

最佳答案

IIUC,您需要从 'utctime' 中提取小时和分钟,将分钟分类在 bins 中并执行groupby关于 count 的小时和分钟_bins消息数:

df['Hour'] = pd.to_datetime(df['utctime']).dt.hour
df['Minute'] = pd.to_datetime(df['utctime']).dt.minute

df['minute_bins'] = pd.cut(df['Minute'], bins=(-0.01,20,40,60), labels=('0 < 20', '20 < 40', '40 < 60'))

df.groupby(['Hour', 'minute_bins'])['message'].count()

print(df)

Hour  minute_bins
18    0 < 20         1
      40 < 60        3
19    0 < 20         1

关于python - 如何在一段时间内使用 pandas groupby 来查找同一时间​​段内多年来的平均计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682428/

相关文章:

python - 无法使用category_encoders的fit_transform对我的数据进行序数编码

python - 根据方括号之间的单词拆分字符串

python - Python 的逗号运算符在赋值过程中是如何工作的?

python - 使用接口(interface)在 Windows 上将 python 脚本作为服务运行

pandas - 在 Pandas 多索引 DataFrame 上扩展指数权重,其中每一天都是一个矩阵

python - 如何更改 Pandas 数据框中的单个索引值?

python - 将 h264 RTSP 流读入 p​​ython 和 opencv

python - 用一个变量格式化多个 %s

python - 如何将 Python 字典转换为 html 表?

Python-将数据框除以数字列表,包括零