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']
})
我有一个数据框,其中有一些 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']
})