питон панды: среднее количество баллов в час за рабочий день - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть база данных, в которой есть голоса.Эти записи о голосовании состоят из: «Отметка времени; оценка»

Счет представляет собой целое число.

Я хочу создать тепловую карту, поэтому я хочу иметь информационный кадр со значениями для каждого часа в каждомрабочий день со средним баллом всех баллов за этот период.

Если в часе этого рабочего дня нет значений, установите среднее значение 0.

Таким образом, я пришел к этому:

gdf = pd.read_sql("select * from scores where survey_id='{}';    ".format(survey_id), self.db_conn)
gdf = gdf.set_index(['time_stamp'])
gdf.index = pd.to_datetime(gdf.index, unit='s')
if len(gdf) == 0:
  return None
gdf['weekday'] = gdf.index.weekday
# gdf['hour'] = gdf.index.hour
gdf = gdf.groupby(by=[gdf['weekday'], pd.Grouper(freq='H')]).agg(['mean']).fillna(0)

Результат этого:

                                score weekday hour
                             mean    mean mean
weekday time_stamp                                
0       2018-10-22 17:00:00  1.600000       0   17
1       2018-10-23 09:00:00  2.666667       1    9
2       2018-10-31 14:00:00  3.000000       2   14
        2018-10-31 19:00:00  4.000000       2   19

Это пропускает все остальные часы недели со значением 0 в качестве среднего.

Есть предложения, что я делаю не так?

Спасибо !!:)

1 Ответ

0 голосов
/ 27 ноября 2018

я получил:

Это сработало, не знаю, могло ли оно быть короче, но это сделало свою работу:

  • создайте новый фрейм данных с 0 значениями для каждого часакаждого рабочего дня.
  • добавлены значения из базы данных

<</p>

    todays_date = datetime.datetime.now().date()
    index = pd.date_range(todays_date - datetime.timedelta(7), periods=7*24, freq='H')
    columns = ['user', 'survey_id', 'score']
    df_ = pd.DataFrame(index=index, columns=columns)
    df_ = df_.fillna(0)  # with 0s rather than NaNs
    gdf = pd.read_sql("select * from scores where survey_id='{}'; ".format(survey_id), self.db_conn)
    gdf = gdf.set_index(['time_stamp'])
    gdf.index = pd.to_datetime(gdf.index, unit='s')
    df_ = df_.append(gdf, ignore_index=False)  # ignoring index is optional

    if len(gdf) == 0:
        return None
    df_['weekday'] = df_.index.weekday
    df_['hour'] = df_.index.hour
    df_ = df_.groupby(by=[df_['weekday'], df_['hour']]).agg(['mean']).fillna(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...