首页 > 解决方案 > 按国家和设备分组的平均每月订单数

问题描述

我想计算

主表

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

标签: pythonpandas

解决方案


使用 ,pd.to_datetimedate列转换为 pandas 日期时间序列,然后使用对数据DataFrame.groupby框进行分组,现在使用 聚合分组中的数据框。现在使用将新数据框中的列除以月份中的相应天数,可以使用以下方法获得:monthcountrydevicecount_orderssumSeries.floordivaverage_monthly_ordersSeries.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

推荐阅读