Pandas进阶玖 类别与区间

本文探讨Pandas中类别与区间的处理,包括使用`pd.cut`和`pd.qcut`进行数据分箱,优化计算效率,以及处理未出现的类别。通过实例分析钻石数据集,展示了如何对切割质量和纯净度进行有序映射,对比不同分箱方法的效果,以及处理缺失类别。
摘要由CSDN通过智能技术生成

Pandas进阶玖 类别与区间

pandas进阶系列根据datawhale远昊大佬的joyful pandas教程写一些自己的心得和补充,本文部分引用了原教程,并参考了pandas官网

另注:本文是对joyful pandas教程的延伸,完整理解需先阅读joyful pandas教程第九章

【练一练】

无论是interval_range还是下一章时间序列中的date_range都是给定了等差序列中四要素中的三个,从而确定整个序列。请回顾等差数列中的首项、末项、项数和公差的联系,写出interval_range中四个参数之间的恒等关系。

我的答案

start + periods * freq = end

练习

Ex1:统计未出现的类别

在第五章中介绍了crosstab函数,在默认参数下它能够对两个列的组合出现的频数进行统计汇总:
请实现一个带有dropna参数的my_crosstab函数来完成上面的功能。

import numpy as np
import pandas as pd
df = pd.DataFrame({
   'A':['a','b','c','a'], 'B':['cat','cat','dog','cat']})
df.B = df.B.astype('category').cat.add_categories('sheep')
df.A = df.A.astype('category').cat.add_categories('d')

我的思路

我利用了之前学过的pivot_table方法,先求出下表

tmp = pd.concat([df.A, df.B], axis=1)
tmp['value'] = 0
tmp
A B value
0 a cat 0
1 b cat 0
2 c dog 0
3 a cat 0

然后利用pivot_table变形,将A的值作为索引,B的值作为列名,value经过统计后作为表中的数值,如果dropna=False就使用concat再补充几列或几行进去,算法如下

def my_crosstab(s1, s2, dropna=True):
    tmp = pd.concat([s1, s2], axis=1)
    tmp['value'] = 0
    res = tmp.pivot_table(index=s1.name,
                         columns=s2.name,
                         values='value',
                         aggfunc='count')
    if not dropna:
        b_cats = set(s2.cat.categories
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值