熊猫:同一小时内的平均值

Val*_*ess 0 python csv pandas

我有一个看起来像这样的 csv:

YYYY-MO-DD HH-MI-SS_SSS             ATMOSPHERIC PRESSURE (hPa) mean
2/24/2016 13:00                            1011.937618
2/24/2016 14:00                            1011.721583
2/24/2016 15:00                            1011.348064
2/24/2016 16:00                            1011.30785
2/24/2016 17:00                            1011.3198
2/24/2016 18:00                            1011.403372
2/24/2016 19:00                            1011.485108
2/24/2016 20:00                            1011.270083
2/24/2016 21:00                            1010.936331
2/24/2016 22:00                            1010.920958
2/24/2016 23:00                            1010.816478
2/25/2016 00:00                            1010.899142
2/25/2016 01:00                            1010.209392
2/25/2016 02:00                            1009.700625
2/25/2016 03:00                            1009.457683
2/25/2016 04:00                            1009.268081
2/25/2016 05:00                            1009.718639
2/25/2016 06:00                            1010.745444
2/25/2016 07:00                            1011.062028
2/25/2016 08:00                            1011.168117
2/25/2016 09:00                            1010.771281
2/25/2016 10:00                            1010.138053
2/25/2016 11:00                            1009.509119
2/25/2016 12:00                            1008.703811
2/25/2016 13:00                            1008.021547
2/25/2016 14:00                            1007.774825
   .....                                     .....
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的数据框,其中包含每天同一小时内的平均值:

Hour                     Average
13:00                   1009.9795825
14:00                   1009.748204
15:00                    ....
Run Code Online (Sandbox Code Playgroud)

有什么简单的方法可以做到吗?

谢谢 !

unu*_*tbu 5

一旦你解析日期为大熊猫的datetime般的系列,那么你就可以访问使用时间序列的时间dt访问

df['YYYY-MO-DD HH-MI-SS_SSS'] = pd.to_datetime(df['YYYY-MO-DD HH-MI-SS_SSS'])
hour = pd.to_timedelta(df['YYYY-MO-DD HH-MI-SS_SSS'].dt.hour, unit='H')
Run Code Online (Sandbox Code Playgroud)

然后你可以分组hour并计算每组的平均值:

df.groupby(hour).mean()
Run Code Online (Sandbox Code Playgroud)
import pandas as pd
df = pd.DataFrame(
    {'ATMOSPHERIC PRESSURE (hPa) mean': 
     [1011.937618, 1011.721583, 1011.348064, 1011.30785, 1011.3198, 1011.403372, 
      1011.485108, 1011.270083, 1010.936331, 1010.920958, 1010.816478, 1010.899142, 
      1010.209392, 1009.700625, 1009.457683, 1009.268081, 1009.718639, 1010.745444, 
      1011.062028, 1011.168117, 1010.771281, 1010.138053, 1009.509119, 1008.703811, 
      1008.021547, 1007.774825],
     'YYYY-MO-DD HH-MI-SS_SSS': 
     ['2/24/2016 13:00', '2/24/2016 14:00', '2/24/2016 15:00', '2/24/2016 16:00', 
      '2/24/2016 17:00', '2/24/2016 18:00', '2/24/2016 19:00', '2/24/2016 20:00', 
      '2/24/2016 21:00', '2/24/2016 22:00', '2/24/2016 23:00', '2/25/2016 00:00', 
      '2/25/2016 01:00', '2/25/2016 02:00', '2/25/2016 03:00', '2/25/2016 04:00', 
      '2/25/2016 05:00', '2/25/2016 06:00', '2/25/2016 07:00', '2/25/2016 08:00', 
      '2/25/2016 09:00', '2/25/2016 10:00', '2/25/2016 11:00', '2/25/2016 12:00', 
      '2/25/2016 13:00', '2/25/2016 14:00']})
df['YYYY-MO-DD HH-MI-SS_SSS'] = pd.to_datetime(df['YYYY-MO-DD HH-MI-SS_SSS'])

hour = pd.to_timedelta(df['YYYY-MO-DD HH-MI-SS_SSS'].dt.hour, unit='H')
hour.name = 'Hour'
result = df.groupby(hour).mean()
Run Code Online (Sandbox Code Playgroud)

产量

                         ATMOSPHERIC PRESSURE (hPa) mean
YYYY-MO-DD HH-MI-SS_SSS                                 
00:00:00                                     1010.899142
01:00:00                                     1010.209392
02:00:00                                     1009.700625
03:00:00                                     1009.457683
04:00:00                                     1009.268081
05:00:00                                     1009.718639
...
Run Code Online (Sandbox Code Playgroud)