首页 > 解决方案 > 使用不以冒号分隔的小时和分钟计算小时平均值

问题描述

我正在使用熊猫数据框。我的数据中有一列以这种格式显示小时数:

    Hour         ALTM         PALT       TMPC       DWPC        RELH  \
0      0  1012.868116  1012.368116  23.556731  19.368497   79.346506   
1     30  1013.142857  1012.642857  23.000000  17.428571   73.714286   
2     35  1012.000000  1011.500000  23.000000  22.000000   94.000000   
3    100  1012.685307  1012.185307  23.251641  19.069231   79.638462   
4    130  1013.333333  1012.833333  24.833333  19.000000   73.166667   
5    200  1012.265487  1011.765487  23.104930  19.143939   80.640506   
6    201  1012.000000  1011.500000  23.000000  21.000000   89.000000   
.
.
.  
68  2330  1013.666667  1013.166667  25.333333  17.500000   63.666667

前两个数字是小时,后两个数字是分钟(小时只是一个数字的情况除外)。我正在尝试按小时计算所有这些变量。

当我使用此命令将 Hour 列转换为 datetime 时:

hour_goss_mean['Hour'] = pd.to_datetime(hour_goss_mean['Hour']).dt.strftime('%H%m')

然后做

hour_goss_mean['Hour']

我明白了

0     0001
1     0001
2     0001
3     0001
4     0001
5     0001
6     0001

其中第二列是新的 Hour 列。我不确定这是否是因为小时和分钟在数据中没有用冒号分隔。我不明白如何获得每小时的平均值。

标签: pythonarrayspandasdatetimemean

解决方案


IIUC,首先您需要提取小时数和分组:

hours = df['Hour'].astype(int) // 100
df.drop('Hour', axis=1).groupby(hours).mean()

输出:

             ALTM         PALT       TMPC       DWPC       RELH
Hour                                                           
0     1012.670324  1012.170324  23.185577  19.599023  82.353597
1     1013.009320  1012.509320  24.042487  19.034616  76.402565
2     1012.132743  1011.632743  23.052465  20.071970  84.820253
23    1013.666667  1013.166667  25.333333  17.500000  63.666667

推荐阅读