熊猫从每个小时的每个ID中选择值

时间:2019-09-07 13:49:49

标签: python pandas hour

我有一个数据帧,其中有一些ID,每个ID都有一些值和时间戳(连续5到7天,每5分钟大约一个值)。我想为每个小时和每个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()

它会自动删除值列并覆盖平均值。我想保留这些列,以便我可以基于“值”列中的值为均值,方差和中位数创建不同的列。我该怎么做?

1 个答案:

答案 0 :(得分:1)

尝试一下:

# 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']
})