У меня есть фрейм данных (df) с почасовым считыванием определенных загрязнителей, с 2001 по 2018. У df есть следующая информация:
date O_3 NO_2 SO_2 PM10 PM25 CO
0 2001-01-01 01:00:00 7.86 67.120003 26.459999 32.349998 12.505127 0.45
1 2001-01-01 02:00:00 7.21 70.620003 20.879999 40.709999 12.505127 0.48
2 2001-01-01 03:00:00 7.11 72.629997 21.580000 50.209999 12.505127 0.41
3 2001-01-01 04:00:00 7.14 75.029999 19.270000 54.880001 12.505127 0.51
4 2001-01-01 05:00:00 8.46 66.589996 13.640000 42.340000 12.505127 0.19
5 2018-04-30 20:00:00 63.00 58.000000 4.000000 2.000000 2.000000 0.30
6 2018-04-30 21:00:00 49.00 65.000000 4.000000 5.000000 4.000000 0.30
7 2018-04-30 22:00:00 49.00 58.000000 4.000000 5.000000 3.000000 0.30
8 2018-04-30 23:00:00 48.00 52.000000 4.000000 7.000000 7.000000 0.30
9 2018-05-01 00:00:00 52.00 43.000000 4.000000 6.000000 4.000000 0.30
Я хочу вычислить среднее значение для каждого столбца на основе в дневные часы. Другими словами, для 2001-01-01 вычислите среднее значение для часов с 01 по 05. Приведенный выше df является лишь небольшим примером, реальный df работает в основном 24 часа в сутки, хотя в некоторые дни это может быть меньше загрязняющих веществ в час чтения. После того как я вычислил среднее значение для каждого столбца, я вычисляю каждую строку, чтобы получить метку.
У df есть следующие спецификации:
Index(['date', 'O_3', 'NO_2', 'SO_2', 'PM10', 'PM25', 'CO', 'Label'], dtype='object')
Что касается значений NaN:
date 0
O_3 0
NO_2 0
SO_2 0
PM10 0
PM25 0
CO 0
Label 0
dtype: int64
А что касается общей информации:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 139608 entries, 0 to 139607
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 date 139608 non-null datetime64[ns]
1 O_3 139608 non-null float64
2 NO_2 139608 non-null float64
3 SO_2 139608 non-null float64
4 PM10 139608 non-null float64
5 PM25 139608 non-null float64
6 CO 139608 non-null float64
7 Label 139608 non-null float64
dtypes: datetime64[ns](1), float64(7)
Я пробовал следующее для группировки по дате:
day_df = hour_df.groupby([hour_df.date.dt.strftime('%Y-%m-%d')]).mean()
Но я не конечно, если это правильный способ сделать это. Если я проверю информацию о df, то получу:
<class 'pandas.core.frame.DataFrame'>
Index: 5824 entries, 2001-01-01 to 2018-05-01
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 O_3 5824 non-null float64
1 NO_2 5824 non-null float64
2 SO_2 5824 non-null float64
3 PM10 5824 non-null float64
4 PM25 5824 non-null float64
5 CO 5824 non-null float64
6 Label 5824 non-null float64
dtypes: float64(7)
Как видно, не все дни имеют 24 часа показаний загрязнителя, иначе вместо только 5824 записей будет 6329 записей. Вот почему я не уверен, правильно ли я вычисляю средние значения.
Мне бы очень хотелось узнать, каким будет правильный способ нацеливания на то, что я ищу.