如何使用多列对 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)

这给出了以下内容。您会注意到这些列不是您最初想要的顺序:看起来 RequestRequestDate 被设置为多索引。我敢肯定,如果需要,您可以重新排列它们,或者继续这样做。

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