Pandas select 每个 ID 每小时的值

Pandas select values from each hour for each ID

我有一个数据框,其中有一些 ID,对于每个 ID,我都有一些值和时间戳(大约每 5 分钟一个值,连续 5 到 7 天)。我想 select,对于每个小时和每个 ID,该小时内值的均值、中值和方差,并将它们存储在不同的列中,如下所示:

hour   mean    var   median     ID
0       2       4      4        1234 
1       4       5      3        1234
...
23      2       2      3        1234

我的专栏是:

ID                       int64
Value                  float64
Date            datetime64[ns]
dtype: object

我的时间戳是以下类型:

%Y-%m-%d %H:%M:%S.%f

如何为每个 ID 创建最终数据框?非常感谢

编辑:

通过以下行,我正确地创建了一个包含小时数的列:

df['hour'] = df.Date.dt.hour

现在的问题是我有一个很长的时间列,相同,如果我像这样使用重新采样:

df = df.set_index('Date').resample('60T').mean().reset_index()

它会自动擦除值列并用平均值覆盖。我想保留这些列,以便我可以根据值列中的值为均值、方差和中位数创建不同的列。我该怎么做那部分?

试试这个:

# Extract the hour from the Date column
h = df['Date'].dt.hour.rename('Hour')

# Group by ID and Hour
df.groupby(['ID', h]).agg({
    'Value': ['mean', 'var', 'median']
})

您可以将 h 系列替换为 pd.Grouper。默认情况下 pd.Grouper 对索引进行分组。您可以设置 key 参数,使其以另一列为目标:

df.groupby([pd.Grouper('1H', key='Date'), 'ID').agg({
    'Value': ['mean', 'var', 'median']
})