如何使用多列对 df 重新采样
How to resample a df with multiple columns
我有多个请求的一分钟数据。我想将其重新采样为每小时一次并按请求分组,以便我可以获得每小时的请求总数
这是数据的样子
| 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
我认为您的 groupby 行缺少某个键 brackets\parens。
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
我有多个请求的一分钟数据。我想将其重新采样为每小时一次并按请求分组,以便我可以获得每小时的请求总数
这是数据的样子
| 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
我认为您的 groupby 行缺少某个键 brackets\parens。
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