Skip to main content
 首页 » 编程设计

python之基于其他列的 Pandas 数据透视表总和(好像有两个索引)

2025年05月04日8lyhabc

我有一个包含两个城市之间转移订单的数据库。我在每条记录中都有一个出发日期、要交付的数量、返回日期和要返回的数量。

数据库是这样的:

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' )。