python - 按国家和设备分组的平均每月订单数
问题描述
我想计算
按设备和国家/地区分组的average_monthly_orders
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
解决方案
使用 ,pd.to_datetime
将date
列转换为 pandas 日期时间序列,然后使用对数据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
推荐阅读
- json - 使用 Postman 的 JSON 请求
- node.js - 第一次调用不将对象传递给端点
- razor - ASP MVC5 当我更改表单上的某些内容并点击保存时,其他数据被删除
- java - 如何将文件中的十六进制值读入字节数组?
- firebase - Cloud Firestore 规则 - 通过它的字段值获取文档
- apache-zeppelin - Apache Zeppelin - 从不同的注释加载(导入)代码
- swift - 在实例化视图时传递值
- tesseract - tesseract ocr如何区分字母和数字
- php - 我必须使用 implode 函数将数组作为字符串更新查询,但它无法正常工作
- javascript - 未捕获的类型错误:在切换 html 元素时无法读取 null 的属性“classList”