为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 按时间间隔(5 分钟、10 分钟、1 天、1 年)分组并计算条目数量

Pandas 按时间间隔(5 分钟、10 分钟、1 天、1 年)分组并计算条目数量

小怪兽爱吃肉 2023-03-08 15:49:16
我有一个简单的熊猫数据框,每天大约有 10000 到 20000 个条目。此数据框包含一个点和一个日期时间 (datetime64)。例如,它看起来像这样:        point   timestamp_local0       A       2018-09-29 00:00:201       A       2018-09-29 00:04:342       A       2018-09-29 00:06:593       B       2018-09-29 00:11:094       B       2018-09-29 01:19:28...     ...     ...24282   B       2018-09-29 21:40:2624283   C       2018-09-29 21:40:3124284   C       2018-09-29 21:45:1724285   A       2018-09-29 22:20:2924286   B       2018-09-29 22:28:08我现在要得到的是一个数据框,它按点和我想指定的间隔对上面的数据框进行分组,并且还计算间隔的每个点的条目数量。此外,间隔应该是例如 5 分钟。间隔,10分钟。间隔或每天、每月或每年的 1 个间隔。到目前为止,这是我对间隔进行分段的结果:df['10min_period'] = df.apply(lambda x: "period_%d"%(int(x[1].minute/10) + 1), axis=1)这将返回:    point   timestamp_local         10min_period0   A       2018-09-29 00:00:20     period_11   B       2018-09-29 00:04:34     period_12   B       2018-09-29 00:06:59     period_13   C       2018-09-29 00:11:09     period_24   C       2018-09-29 01:19:28     period_2这计算了时期:df = df.groupby([df['point'], df['10min_period']]).agg(['count'])这将返回以下数据框:                           timestamp_localpoint   10min_period       countA       period_1           2092        period_2           2437        period_3           2181        period_4           2525        period_5           2325        period_6           2317B       period_1           1814        period_2           1719        period_3           1732        period_4           1575        period_5           1789        period_6           1781...     ...                ...但这并不是我想要的。原因是期间行条目错误。我的代码以独立于年、月、日和小时的10 分钟间隔对时间段进行了分段。这正是我不想要的!我想要一个按我指定的时间间隔分段的日期框架,例如 5 分钟。, 10 min., 1 day, 1 year 等等但考虑年、月、日、小时和分钟!(看看这些句点是如何命名的!)以这种方式命名时间段非常重要,所以我知道条目包含哪一天和时间间隔。我怎样才能做到这一点?例如,如果它是 5 分钟的间隔,则该时间段应命名为,period_2018-09-29_00:00:00依此类推。period_2018-09-29_00:05:00period_2018-09-29_00:25:00
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您是否正在寻找这样的东西,间隔很短:

df.groupby(['point',df.timestamp_local.dt.floor('5Min')]).size()

这个,对于月/年

df.groupby(['point', df.timestamp_local.dt.to_period('M')]).size()


查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号