python - 如何使用 python 在精确时间获取具有占用计数的数据集并返回具有每小时最大值的数据集?
问题描述
我想获取一个数据集,该数据集提供每 15 分钟在一个位置有多少人的计数(例如,21:45 在位置 A 有 13 人,在 21:30 在位置 A 有 29 人等),并且而是让数据集显示在任何小时内占用该位置的最大人数(例如,在 21:00 到 21:59 之间,位置 A 的最大占用人数为 33 - 是否发生最多 33 人并不重要21:00、21:15、21:30 或 21:45)。
我的起点是一个看起来像这样的 csv(它有数千个条目,但这只是一个例子):
+--------------------+-------+-------+-------+-------+-------+-------+
| TIME | LOC A | LOC B | LOC C | LOC D | LOC E | LOC F |
+--------------------+-------+-------+-------+-------+-------+-------+
| | | | | | | |
| 8/28/2020 22:00:22 | 5 | 0 | 0 | 0 | 10 | 0 |
| | | | | | | |
| 8/28/2020 21:45:21 | 13 | 10 | 23 | 14 | 24 | 0 |
| | | | | | | |
| 8/28/2020 21:30:22 | 29 | 13 | 31 | 26 | 35 | 7 |
| | | | | | | |
| 8/28/2020 21:15:22 | 32 | 17 | 41 | 32 | 49 | 12 |
| | | | | | | |
| 8/28/2020 21:00:22 | 33 | 24 | 50 | 43 | 64 | 15 |
| | | | | | | |
| 8/28/2020 20:45:23 | 44 | 31 | 60 | 47 | 88 | 15 |
| | | | | | | |
| 8/28/2020 20:30:22 | 48 | 36 | 70 | 48 | 120 | 25 |
| | | | | | | |
| 8/28/2020 20:15:23 | 48 | 42 | 82 | 57 | 124 | 26 |
+--------------------+-------+-------+-------+-------+-------+-------+
为了确认,列中的值是在那个精确时间出现在那个位置的人数。
我的目标是这样的:
+--------------------+-------+-------+-------+-------+-------+-------+
| TIME | LOC A | LOC B | LOC C | LOC D | LOC E | LOC F |
+--------------------+-------+-------+-------+-------+-------+-------+
| | | | | | | |
| 2020-08-28 22:00 | 5 | 0 | 0 | 0 | 10 | 0 |
| | | | | | | |
| 2020-08-28 21:00 | 33 | 24 | 50 | 43 | 64 | 15 |
| | | | | | | |
| 2020-08-28 20:00 | 48 | 42 | 82 | 57 | 124 | 26 |
+--------------------+-------+-------+-------+-------+-------+-------+
因此,例如,如果 14:00、14:15、14:30 和 14:45 的位置计数分别为 5、7、12、6,则该位置的新条目将仅显示 14: 00 和 12 的值(因为那是那个时期的最大人数)。
我希望我已经解释过了。我对 python 还是很陌生,我完全有信心可以做到这一点,我只是不太知道怎么做。
任何帮助将不胜感激 - 非常感谢提前ʕ •ᴥ•ʔ</p>
解决方案
您可以在索引上使用 groupby 来解决问题:
import pandas as pd
df = pd.DataFrame([{'Time':'2020-01-01 21:15:00', 'LOCA':3,'LOCB':0},
{'Time':'2020-01-01 21:00:00', 'LOCA':4, 'LOCB':10},
{'Time':'2020-01-01 20:00:00', 'LOCA':3,'LOCB':1},
{'Time':'2020-01-01 20:03:00', 'LOCA':12, 'LOCB':0},
{'Time':'2020-01-05 21:15:00', 'LOCA':3,'LOCB':0}])
#df.set_index(df['Time'],inplace = True)
df.set_index('Time', inplace = True) #That is the proper way to do it
df.index = pd.to_datetime(df.index)
#df.drop(['Time'], axis = 1, inplace = True)
df = df.groupby([df.index.date, df.index.hour]).max()
print(df)
推荐阅读
- c++ - 没有尖括号的模板使用 - 重载?
- r - 关于如何在 R 闪亮的应用程序中创建词汇表的任何想法?
- arrays - 我们如何使用自定义值更新数组字段的值/在 mongodb 的嵌套数组中添加字段
- php - 规范 MaaS 的 PHP OAuth1 提供程序
- python - 是否可以在模型删除时执行功能?
- css - ViewEncapsulation.ShadowDom 和 Primeng。并非所有样式都呈现
- reactjs - 如何通过反应路线传递数据
- javascript - redux saga 多个调用在另一个失败时进行下一个
- c# - 如何将数据库中的列字段添加到字符串生成器 c# 并实现两列布局
- java - 我想从我自己的服务器而不是 java worldwind 中的 nasa 服务器获取数据