我有一个包含两个城市之间转移订单的数据库。我在每条记录中都有一个出发日期、要交付的数量、返回日期和要返回的数量。
数据库是这样的:
df = pd.DataFrame({"dep_date":[201701,201701,201702,201703], "del_amount":[100,200,300,400],"ret_date":[201703,201702,201703,201705], "ret_amount":[50,75,150,175]})
df
dep_date del_amount ret_date ret_amount
0 201701 100 201703 50
1 201701 200 201702 75
2 201702 300 201703 150
3 201703 400 201705 175
我想得到一个以dep_data为索引的数据透视表,显示当月del_amount的总和以及出发日期当月预定的返回金额。
这是一个奇怪的结构,因为它似乎有两个索引。我需要的结果是:
del_amount ret_amount
dep_date
201701 300 0
201702 300 75
201703 400 200
请注意,某些返回日期与任何出发月份都不匹配。有谁知道是否可以在 pivot_table 环境中构建一个合适的 aggfunc 来实现这一点?如果不可能,谁能告诉我最好的方法?
提前致谢
请您参考如下方法:
您需要两个 groupby + sum 操作,然后是 reindex 和 concatenation -
i = df.groupby(df.dep_date % 100)['del_amount'].sum()
j = df.groupby(df.ret_date % 100)['ret_amount'].sum()
pd.concat([i, j.reindex(i.index, fill_value=0)], 1)
del_amount ret_amount
dep_date
1 300 0
2 300 75
3 400 200
如果你想对整个日期(而不仅仅是月份)进行分组,将 df.groupby(df.dep_date % 100) 更改为 df.groupby('dep_date' )。
