Pandas Dataframe, получение среднего значения за каждый понедельник 1 утра - PullRequest
0 голосов
/ 12 июня 2018

мой DataFrame выглядит следующим образом:

index                   value
2016-03-21 00:00:00     0.613014
2016-03-21 01:00:00     0.596383
2016-03-21 02:00:00     0.623570
2016-03-21 03:00:00     0.663350
2016-03-21 04:00:00     0.677817
2016-03-21 05:00:00     0.727116
2016-03-21 06:00:00     0.920279
2016-03-21 07:00:00     1.205863
2016-03-21 08:00:00     0.880946
2016-03-21 09:00:00     0.186947
2016-03-21 10:00:00     -0.563276
2016-03-21 11:00:00     -1.249595
2016-03-21 12:00:00     -1.596035
2016-03-21 13:00:00     -1.886954
2016-03-21 14:00:00     -1.912325
2016-03-21 15:00:00     -1.750623
...     
2016-06-20 23:00:00     2.125791

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

Надеюсь, я мог четко выразить свое мнение.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 12 июня 2018

Я не уверен, как интерпретировать ваш вопрос, поэтому вот два ответа (на разные вопросы)

, чтобы получить среднее значение всех значений, которые встречаются в понедельник в 1:00.(выходной будет один скаляр) :

# Make sure the index is a pd.datetime object
df.index = pd.to_datetime(df.index)

# find all rows which occur on a monday and at 01:00:00, and take the mean
monday_means = (df.loc[(df.index.weekday_name == 'Monday') &
                       (df.index.time == pd.to_datetime('01:00:00').time())]
                .mean()
                .to_frame('Monday 1 Am'))

, чтобы получить среднее значение за предыдущую неделю, с недели, начинающейся в понедельник в 1:00 (выходные данные будут сериями) :

# Make sure the index is a pd.datetime object
df.index = pd.to_datetime(df.index)

# Create a column for week number, which counts consecutively every monday at 1:00:00
df['week_number'] = ((df.index.weekday_name == 'Monday') &
                     (df.index.time == pd.to_datetime('01:00:00').time())
                     .cumsum())


# Groupby week number and get the mean
df.groupby('week_number').mean()

Или, проще (но менее гибкий, он начнет неделю в понедельник в полночь, а не в 1 час ночи):

df.groupby(pd.Grouper(freq='W')).mean()
...