Вставить день недели в Python фрейм данных - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь подсчитать среднее количество продаж ресторана в каждый день недели. Есть семь ресторанов, которые не всегда открыты в один и тот же день.

Данные структурированы следующим образом:

Структура данных

Мне удалось преобразование даты в день недели с помощью этого кода:

#converting days in table to days of the week
s = pd.date_range('2018-01-01', '2018-12-31', freq = 'D').to_series()

Как мне затем добавить фрейм данных, чтобы поместить это значение, на основе серии «день»?

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Используя ваш пример, вы можете напрямую преобразовать его:

s.dt.strftime('%A')
0 голосов
/ 02 августа 2020

Предполагая, что у вас есть фрейм данных, который выглядит примерно так (фрейм данных изменен из примера изображения, чтобы содержать два местоположения и диапазон дат за несколько недель):

              location         day  number_of_orders
0          Bryant Park  2018-01-01               394
1          Bryant Park  2018-01-02               807
2          Bryant Park  2018-01-03               744
3          Bryant Park  2018-01-04               791
4          Bryant Park  2018-01-05               677
5          Bryant Park  2018-01-06               294
6          Bryant Park  2018-01-07               503
7          Bryant Park  2018-01-08               434
8          Bryant Park  2018-01-09               591
9          Bryant Park  2018-01-10               877
10  Rockefeller Center  2018-01-01               135
11  Rockefeller Center  2018-01-02               237

Вы можете сначала добавить столбец day_of_week :

df['day_of_week'] = pd.to_datetime(df['day']).dt.day_name()

Итак, теперь фрейм данных выглядит так:

              location         day  number_of_orders day_of_week
0          Bryant Park  2018-01-01               394      Monday
1          Bryant Park  2018-01-02               807     Tuesday
2          Bryant Park  2018-01-03               744   Wednesday
3          Bryant Park  2018-01-04               791    Thursday
4          Bryant Park  2018-01-05               677      Friday
5          Bryant Park  2018-01-06               294    Saturday
6          Bryant Park  2018-01-07               503      Sunday
7          Bryant Park  2018-01-08               434      Monday
8          Bryant Park  2018-01-09               591     Tuesday
9          Bryant Park  2018-01-10               877   Wednesday
10  Rockefeller Center  2018-01-01               135      Monday
11  Rockefeller Center  2018-01-02               237     Tuesday

Затем вы можете использовать этот новый столбец для группировки для достижения желаемого результата:

res_df = df.groupby(['location', 'day_of_week']).mean().rename(columns={"number_of_orders": "avg_number_of_orders"})

Фрейм выходных данных:

location           day_of_week  avg_number_of_orders               
Bryant Park        Friday                      677.0
                   Monday                      414.0
                   Saturday                    294.0
                   Sunday                      503.0
                   Thursday                    791.0
                   Tuesday                     699.0
                   Wednesday                   810.5
Rockefeller Center Monday                      135.0
                   Tuesday                     237.0

Обратите внимание, что вам может потребоваться внести несколько изменений, чтобы он работал с вашими фактическими данными, поскольку вы фактически не указываете, все ли местоположения хранятся в одном фрейме данных, и т. д. c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...