Среднемесячные_заказы сгруппированы по стране и устройству - PullRequest
1 голос
/ 18 июня 2020

Я хотел бы вычислить

  • средний_месячный_ряд сгруппированные по устройству и стране

  • average_monthly_orders основано на ежедневных count_orders , усредненных за данный месяц

Основная таблица

date        country  device  count_orders
2019-01-01  UK       phone    100
2019-01-02  UK       tablet   200
2019-01-03  UK       phone    200
2019-01-04  UK       phone    300
2019-01-05  UK       tablet   400
2019-01-06  UK       phone    400

2019-01-01  JP       phone    200
2019-01-02  JP       tablet   100
2019-01-03  JP       phone    100
2019-01-04  JP       phone    500
2019-01-05  JP       tablet   300
2019-01-06  JP       phone    300


Таблица вывода

month       country  device  average_monthly_orders
January-19  UK       phone   32 
January-19  UK       tablet  19 
January-19  JP       phone   35
January-19  JP       tabet   13

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Используйте, pd.to_datetime, чтобы преобразовать столбец date в ряд pandas datetime, затем используйте DataFrame.groupby, чтобы сгруппировать фрейм данных на month, country и device, теперь объедините count_orders в сгруппированном фрейме данных, используя sum. Теперь используйте Series.floordiv, чтобы разделить столбец average_monthly_orders в новом фрейме данных на соответствующие дни месяца, которые можно получить, используя Series.dt.daysinmonth:

df['date'] = pd.to_datetime(df['date'])
df1 = (
    df.groupby([df['date'].dt.strftime('%B-%y'), 'country', 'device'], sort=False)
    .agg(average_monthly_orders=('count_orders', 'sum'))
    .reset_index()
)

df1['average_monthly_orders'] = (
    df1['average_monthly_orders'].floordiv(pd.to_datetime(
        df1['date'], format='%B-%y').dt.daysinmonth)
)

# print(df1)
         date country  device  average_monthly_orders
0  January-19      UK   phone                      32
1  January-19      UK  tablet                      19
2  January-19      JP   phone                      35
3  January-19      JP  tablet                      12
0 голосов
/ 18 июня 2020

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

0 голосов
/ 18 июня 2020

На основе предоставленных вами данных:

df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.strftime('%B-%y')
df = df.groupby(by=['month', 'country', 'device'], as_index=False).mean().rename(columns={'count_orders': 'average_monthly_orders'})
print(df)

        month country  device  count_orders
0  January-19      JP   phone           275
1  January-19      JP  tablet           200
2  January-19      UK   phone           250
3  January-19      UK  tablet           300
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...