首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何按月汇总和汇总项目?

如何按月汇总和汇总项目?
EN

Stack Overflow用户
提问于 2016-11-26 17:39:48
回答 2查看 759关注 0票数 3

我有两个数据(订单和价格的项目):

代码语言:javascript
复制
orders = pd.DataFrame({'id': [1,2], 'sum_delivery': [10, 0], 'date': ['2016-01-01', '2016-01-05']})
items = pd.DataFrame({'id': [1,2,3], 'order_id': [1,1,2], 'price': [100, 100, 500], 'count':[5,5,1]})

我希望按月汇总数据,并最终获得该数据:

代码语言:javascript
复制
{'date': ['2016-01'], 'sum': [1510]}

sql很容易实现,但是如何处理熊猫呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-26 18:05:20

您希望每个订单只考虑sum_delivery一次,因此您必须在加入之前使用groupby

代码语言:javascript
复制
>>> items2 = items.groupby('order_id', as_index=False)['sum'].sum()
>>> items2
   order_id   sum
0         1  1000
1         2   500

现在您可以使用pandas.DataFrame.merge使用自定义列名:

代码语言:javascript
复制
>>> res = pd.merge(orders, items2, left_on = 'id', right_on = 'order_id')[['date', 'sum', 'sum_delivery']]
>>> res
         date   sum  sum_delivery
0  2016-01-01  1000            10
1  2016-01-05   500             0

现在只需做简单的数学和简单的pandas.DataFrame.groupby (不要忘记使用as_index=False):

代码语言:javascript
复制
>>> res['date'] = res['date'].str[:7]
>>> res['sum2'] = res['sum'] + res['sum_delivery']
>>> res2 = res.groupby('date', as_index=False)['sum2'].sum()
>>> res2
      date  sum2
0  2016-01  1510
票数 3
EN

Stack Overflow用户

发布于 2016-11-27 16:48:24

我做了这件事,效果很好:

代码语言:javascript
复制
items2 = items.groupby('order_id', as_index=False)['sum'].sum()
res = pd.merge(orders, items2, left_on = 'id', right_on = 'order_id')[['date', 'sum', 'sum_delivery']]

res['sum2'] = res['sum'] + res['sum_delivery']
res.index = pd.to_datetime(res.date)
tmpdf = res.groupby(pd.TimeGrouper("M")).sum()[['sum2']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40821161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档