python - Pandas Python - 计数和分组日期时间索引
问题描述
我正在将一个非常大的 excel 文件读入数据框
Date Lane Lane Name Direction DirectionName Speed (mph) Headway (s) Gap (s) Flags Flag Text
0 2018-02-02 00:00:03.000 6 SB_NS 2 South 38.525 NaN NaN 5 Friday
1 2018-02-02 00:00:22.010 5 SB_MID 2 South 32.310 NaN NaN 5 Friday
2 2018-02-02 00:00:22.020 4 SB_OS 2 South 44.739 NaN NaN 5 Friday
3 2018-02-02 00:00:36.040 6 SB_NS 2 South 33.554 NaN NaN 5 Friday
4 2018-02-02 00:00:49.070 6 SB_NS 2 South 39.768 12.300 11.847 5 Friday
... ... ... ... ... ... ... ... ... ... ...
503763 2018-02-27 23:59:00.090 2 NB_MID 1 North 32.932 4.415 3.833 2 Tuesday
503764 2018-02-27 23:59:29.090 6 SB_NS 2 South 29.825 65.500 64.700 2 Tuesday
503765 2018-02-27 23:59:32.050 4 SB_OS 2 South 29.205 236.000 235.848 2 Tuesday
503766 2018-02-27 23:59:33.070 6 SB_NS 2 South 37.283 3.330 3.462 2 Tuesday
503767 2018-02-27 23:59:58.050 1 NB_NS 1 North 36.661 76.000 75.669 2 Tuesday
503768 rows × 10 columns
我删除了不需要的列。我只对 [DirectionName = South] 的某些日期和数据感兴趣。我还留下了“标志文本”,其中只是星期几。我还设置了 DateTime 格式并将其设为索引。
下面的代码是我用来指定要使用的日期的代码:
#df.sort_index(inplace=True)
df = df.loc[(df.DirectionName =="South")]
# Specify dates to use
myDates = ['2018-02-02', '2018-02-09', '2018-02-16', '2018-02-23']
df_in = df[pd.to_datetime(df.index.date).isin(myDates)]
df
这给了我这个输出:
DirectionName FlagText
Date
2018-02-02 00:00:03.000 South Friday
2018-02-02 00:00:22.010 South Friday
2018-02-02 00:00:22.020 South Friday
2018-02-02 00:00:36.040 South Friday
2018-02-02 00:00:49.070 South Friday
... ... ...
2018-02-27 23:58:20.070 South Tuesday
2018-02-27 23:58:23.040 South Tuesday
2018-02-27 23:59:29.090 South Tuesday
2018-02-27 23:59:32.050 South Tuesday
2018-02-27 23:59:33.070 South Tuesday
251528 rows × 2 columns
我希望能够计算所选日期的总行数。例如,我想计算日期 02-02-2018 的每一行。最终,我希望能够计算一天中每个小时的总数(0am > 23:59pm。)
这是我想要的输出的一个例子:
DirectionName Flag Text Count
Date
2018-02-02 01:00:00.000 South Friday 234
2018-02-02 02:00:00.000 South Friday 554
2018-02-02 03:00:00.000 South Friday 785
2018-02-02 04:00:00.000 South Friday 124
2018-02-02 05:00:00.000 South Friday 345
... ... ...
- 我如何能够像上面显示的那样对每小时的日期进行分组?
- 那么我如何能够计算该小时范围内的日期?
- 我可以在多个日期使用这种方法吗?(四个不同的日期)
我曾尝试查看其他帖子/文档,但因为我已将日期放入索引而感到困惑?我认为这更有意义。
帮助和澄清将不胜感激
解决方案
使用 groupby 按日期分组,然后使用计数。
# if your date column is in date plus time then convert it to date then group by date then count of Date column
df.groupby([df['Date'].dt.date])['Date'].count()
如果你的日期已经是日期格式,你可以简单地做
df.groupby('Date')['Date'].count()
推荐阅读
- r - dcast 从宽到长
- java - Kerberos 和纱线节点管理器无法连接资源管理器。未能指定服务器的 Kerberos 主体名称
- lua - Lua 3d 表缺乏对象持久性(键值与表数据不一致)
- db2 - UnicodeDecodeError:“utf-16-le”编解码器无法解码位置 10-11 中的字节:非法编码
- azure-devops - 当我的 Azure DevOps 构建管道运行时,我只想创建一个新的 nuget 包版本 - 如果解决方案的项目代码已更改。如何?
- php - 如何在 wordpress 主页上加载 Bootstrap **仅限**
- python - 让不和谐的机器人在语音频道上说些什么
- javascript - 从 ejs 转换为 html
- node.js - 使用 ejs 表达的节点:“ReferenceError:未定义植物”
- java - 如果条件变量不是作为队列实现的,为什么条件变量也称为条件队列?