按级别分组,按其他级别的熊猫分组

时间:2020-02-20 19:51:58

标签: python pandas dataframe group-by

我每小时采样一次气象数据,其中包含[温度,湿度,速度]

Timestamp      Humidity Temp    Speed
01/01/2019 00:00    57  23  2.222222222
01/01/2019 01:00    56  23  1.944444444
01/01/2019 02:00    55  23  1.944444444
01/01/2019 03:00    54  22  1.944444444
01/01/2019 04:00    55  22  1.944444444
01/01/2019 05:00    56  22  1.666666667
01/01/2019 06:00    57  22  1.666666667
01/01/2019 07:00    57  22  1.666666667
01/01/2019 08:00    57  23  1.944444444
01/01/2019 09:00    57  23  1.944444444
01/01/2019 10:00    55  23  2.222222222

我想创建一个包含以下内容的数据框:

时间戳(每天)。时间戳(每小时)。温度(每小时),湿度(每小时),湿度(每小时),温度(每天),湿度(每天),湿度(每天)

最快的方法是什么(例如使用一组)?

在我的尝试下

        weather_data = weather_data.groupby(pd.Grouper(key='Timestamp', freq='1d'),pd.Grouper(key='Timestamp', freq='1d'))\
            .agg(Temp_Daily = ('Temp','mean'),
                 Humidity_Daily=('Humidity', 'mean'),
                 Speed_Daily=('Speed', 'mean'),
                 Temp = ('Temp', lambda x:x),
                 Humidity=('Humidity', lambda x: x),
                 Speed=('Speed', lambda x: x)
                 ).reset_index()

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的预期输出,则可以将每日平均值连接到原始数据框(更改列名称后)。

# Sample data.
df = pd.DataFrame({
    'Timestamp': pd.date_range('2019-01-01 00:00', '2019-01-01 10:00', freq='H'),
    'Humidity': [57, 56, 55, 54, 55, 56, 57, 57, 57, 57, 55],
    'Temp': [23, 23, 23, 22, 22, 22, 22, 22, 23, 23, 23],
    'Speed': [2.222222222, 1.944444444, 1.944444444, 1.944444444, 1.944444444, 1.666666667, 1.666666667, 1.666666667, 1.944444444, 1.944444444, 2.222222222]
})


# Solution.
df_daily = (
    df
    .groupby(df['Timestamp'].dt.date)[['Humidity', 'Temp', 'Speed']]
    .transform('mean')
    .add_suffix(' (daily)')
    .set_index(df['Timestamp'])
)
result = pd.concat([df.set_index('Timestamp').add_suffix(' (Hourly)'), df_daily], axis=1)

>>> result.shape
(11, 6)

>>> result
                     Humidity (Hourly)  Temp (Hourly)  Speed (Hourly)  \
Timestamp                                                               
2019-01-01 00:00:00                 57             23        2.222222   
2019-01-01 01:00:00                 56             23        1.944444   
2019-01-01 02:00:00                 55             23        1.944444   
2019-01-01 03:00:00                 54             22        1.944444   
2019-01-01 04:00:00                 55             22        1.944444   
2019-01-01 05:00:00                 56             22        1.666667   
2019-01-01 06:00:00                 57             22        1.666667   
2019-01-01 07:00:00                 57             22        1.666667   
2019-01-01 08:00:00                 57             23        1.944444   
2019-01-01 09:00:00                 57             23        1.944444   
2019-01-01 10:00:00                 55             23        2.222222   

                     Humidity (daily)  Temp (daily)  Speed (daily)  
Timestamp                                                           
2019-01-01 00:00:00                56     22.545455       1.919192  
2019-01-01 01:00:00                56     22.545455       1.919192  
2019-01-01 02:00:00                56     22.545455       1.919192  
2019-01-01 03:00:00                56     22.545455       1.919192  
2019-01-01 04:00:00                56     22.545455       1.919192  
2019-01-01 05:00:00                56     22.545455       1.919192  
2019-01-01 06:00:00                56     22.545455       1.919192  
2019-01-01 07:00:00                56     22.545455       1.919192  
2019-01-01 08:00:00                56     22.545455       1.919192  
2019-01-01 09:00:00                56     22.545455       1.919192  
2019-01-01 10:00:00                56     22.545455       1.919192