python - 如何按月汇总和汇总项目?

标签 python pandas dataframe

我有 2 个数据框(带价格的订单和商品):

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]})

我想按月汇总数据,最后得到这个dataframe:

{'date': ['2016-01'], 'sum': [1510]}

用 sql 很容易,但是用 pandas 怎么办呢?

最佳答案

您希望每个订单仅考虑一次sum_delivery,因此您必须groupby加入之前:

>>> items2 = items.groupby('order_id', as_index=False)['sum'].sum()
>>> items2
   order_id   sum
0         1  1000
1         2   500

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

>>> 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):

>>> 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

关于python - 如何按月汇总和汇总项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821161/

相关文章:

python - python中关键字参数值的命名空间是什么?

python - 在 Django Rest Framework 中的序列化程序之间混合公共(public)字段

python - 如何将日期和 Pandas 中的其他列分组

python - Pandas df 中每个用户的两个事件行之间的时间差

r - 将字符串列拆分为 2 列,一列是数字,另一列是日期

r - 为什么在使用 read.csv 时将 X 添加到数据框变量名称中?

python - 为什么在python中递归调用同一个函数时要使用return

php - PHP 中缺少 $_SERVER header ,但 Python 中存在 $_SERVER header

pandas - 如何使用标称值绘制 Pandas 的直方图?

python - 计算非零元素并绘图