Pandas多层索引DataFrame添加计算指标:每周每订单商品数量统计
你出现列层级重复的核心原因是:分组时先指定了选取order_id、product_id两列,后续聚合时又用了以这两个字段名为键的字典,导致列名重复嵌套了两层。
以下是完整实现代码:
import pandas as pd # 第一步:确保date列为时间格式,避免重采样报错 df['date'] = pd.to_datetime(df['date']) # 第二步:按维度分组、按周重采样聚合 temp = ( df.set_index('date') .groupby(['category', 'subcategory']) .resample('W-MON', label='left') # 直接指定聚合后的列名,避免层级重复 .agg( order_id=('order_id', 'nunique'), product_id=('product_id', 'count') ) .reset_index() ) # 第三步:计算product_per_order,内置除0异常处理:订单数为0时直接返回0 temp['product_per_order'] = temp.apply( lambda x: x['product_id'] / x['order_id'] if x['order_id'] != 0 else 0, axis=1 ) # 第四步:转换为你需要的宽表结构,日期作为最上层列 final_df = temp.pivot( index=['category', 'subcategory'], columns='date', values=['order_id', 'product_id', 'product_per_order'] # 交换列层级,把日期放到最上层,再按日期顺序排序 ).swaplevel(axis=1).sort_index(axis=1).fillna(0)
最终输出的final_df列结构为第一层级是周维度日期,第二层级是order_id、product_id、product_per_order三个指标,完全匹配你需要的结构,无数据的维度组合默认填充0。
内容的提问来源于stack exchange,提问作者Jonas Palačionis
相关产品推荐
相关产品推荐

