学习记录298@pandas 利用Categorical自定义排序后groupby出现问题

原来的电脑的pandas是pandas-0.24.2,现在是pandas-1.1.0,在运行一下程序时候出现了不同,pandas-1.1.0运行的结果不符合预期。

import numpy as np
import pandas as pd
import xlwings as xw
from pandas.api.types import CategoricalDtype  # 弥补astype的不足

data=pd.read_excel('E:\\ywj严文杰备份\\带时间消费明细-持续更新\\20年消费明细.xlsx')
data=data.loc[data['课室']=='国际精品课']
# 自定义排序规则 '微会员', '金卡', '红宝石卡', '钻石卡'
data['卡别'] =  data['卡别'] .astype( CategoricalDtype(categories=['微会员', '金卡', '红宝石卡', '钻石卡'], ordered=True))
# 分组,分组的时候回自动排序
data_gr=data.groupby(by=['部类','专柜','卡别']).agg({'卡号': lambda x: len(set(x)), '销售金额': np.sum})

data_gr.to_excel(r'C:\Users\02180085\Desktop\结果.xlsx')

代码要解决的问题就是按照’部类’,‘专柜’,'卡别’三个层级分类,然后求数量和金额。

pandas-0.24.2得到的结果如下:
这个结果是正确的,每个部类只包含自己部类的专柜,且没有的卡别就不显示出来。
在这里插入图片描述
在这里插入图片描述

pandas-1.1.0得到的结果如下:
这个结果有什么问题呢?有两点问题,一个是每个部类的下一级都包含所有的专柜,本来应该是每个部类包含自己部类下的专柜的;另外一个问题是就算某个专柜没有钻石卡,但是也显示在内,只是数据为空而已。
在这里插入图片描述
在这里插入图片描述
具体什么原因,测试了一下,如果没有自定义排序那一段代码,pandas-1.1.0就不会出现问题,但是到底是包的问题还是代码的问题,还不清楚!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值