如何对具有多列的df重新采样
Posted
技术标签:
【中文标题】如何对具有多列的df重新采样【英文标题】:How to resample a df with multiple columns 【发布时间】:2022-01-05 07:33:24 【问题描述】:我有多个请求的分钟数据。我想将其重新采样为每小时并按请求分组,以便我可以获得每小时的请求总数
这就是数据的样子
| RequestDate | Request | Count |
| 2021-11-24 22:09:00 | Request 1 | 10 |
| 2021-11-24 22:09:00 | Request 3 | 1 |
| 2021-11-24 22:09:00 | Request 2 | 4 |
| 2021-11-24 22:09:00 | Request 4 | 5 |
| 2021-11-24 22:10:00 | Request 1 | 4 |
| 2021-11-24 22:10:00 | Request 2 | 0 |
| 2021-11-24 22:10:00 | Request 3 | 6 |
| 2021-11-24 22:10:00 | Request 4 | 5 |
| 2021-11-24 22:10:00 | Request 5 | 1 |
输出:
| RequestDate | Request | Count |
| 2021-11-24 22:00:00 | Request 1 | 14 |
| 2021-11-24 22:00:00 | Request 2 | 4 |
| 2021-11-24 22:00:00 | Request 3 | 7 |
| 2021-11-24 22:00:00 | Request 4 | 10 |
| 2021-11-24 22:00:00 | Request 5 | 1 |
我试过了,但以错误结束:
df_groupby = df.groupby(by=[df["RequestDate"].resample('h'), "Request"])
df_groupby["Request"]
KeyError: 'RequestDate'
带有测试数据的df可以如下创建
df = pd.read_csv("test_data.csv")
test_data.csv
RequestDate,Request,RequestCount
2021-11-18 00:00:00,Request1,4
2022-11-18 00:00:00,Request2,4
2022-11-18 00:00:00,Request3,4
2022-11-18 00:00:00,/Request4,4
2022-11-18 00:00:00,Request5,4
2021-11-18 00:01:00,Request1,4
2021-11-18 00:02:00,Request1,2
2021-11-18 00:03:00,Request2,3
2022-11-18 00:04:00,Request3,4
2021-11-18 00:05:00,Request1,4
【问题讨论】:
请提供一个代码示例来创建数据框。这真的很容易,这可以分3步完成。记得用帖子里的代码格式写代码示例:符号。 @RobertoT - 我添加了用于创建测试 df 的代码示例 【参考方案1】:我认为您的 groupby 行缺少一些关键括号\括号。
resample()
方法应用于groupby
对象,因此它应该在groupby()
完全关闭之后使用。也就是说,通常它是df.groupby(...).resample(...)
,但你在 groupby 中有重采样。
对于重采样,您还需要将 RequestDate
列作为您的索引(它可能在您的示例中,但如果不是,您需要使用 df = df.set_index('RequestDate')
)。然后在 Request 列上进行 groupby。
RequestDate 还需要保存为日期时间(如果尚未保存)
总而言之,我认为你可以像这样得到你想要的:
df['RequestDate'] = pd.to_datetime(df['RequestDate']) # makes the column a datetime column, needed for resample
df = df.set_index('RequestDate')
df_grp = df.groupby('Request').resample('h').sum()
print(df_grp)
这给出了以下内容。您会注意到列的顺序不是您最初想要的:看起来Request
和RequestDate
被设置为多索引。我敢肯定,如果需要,您可以重新安排它们,或者继续这样做。
Request RequestDate Count
Request 1 2021-11-24 22:00:00 14
Request 2 2021-11-24 22:00:00 4
Request 3 2021-11-24 22:00:00 7
Request 4 2021-11-24 22:00:00 10
Request 5 2021-11-24 22:00:00 1
【讨论】:
谢谢@scotscotmcc。当我使用它时,我意识到实际数据在 2022 年的日期很少,并且对于直到 2022 年该范围内不存在的所有日期,它都显示为 0。以上是关于如何对具有多列的df重新采样的主要内容,如果未能解决你的问题,请参考以下文章