[Python] 变量重分类(连续变量重分类、离散变量重分类)

目录

1. Python连续变量重分类

1.1 等宽重编码

1.2 等频重编码

2. 离散变量重分类

2.1 分类后为1个指标

2.2 分类后为多个指标

1. Python连续变量重分类

cut(  )函数

新变量 = pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

# x:待分类的变量
# bins:分段的依据
# right:right=True表示分段后包含右边的数,即左开又闭(X,X]
# labels:分类后新的分类标签,若不修改默认以(X,X]/[X,X) 的格式显示
# 其他参数详见:help(pd.cut)

1.1 等宽重编码

案例 :

一份df格式的2020年的人口数据,数值为连续型,最小值为0,最大值为109695.39。现在需要分段为0,(0,100]、(100,300]、(300,500]、(500,700]、(700,900]、(900,1100]、(1100,1300]、1300及以上9类。

#格式左开右闭,从零开始(XX],bins需要加一个最大值
bins = [0,100,200,300,500,700,900,1100,1300,max(df['2020'])] #10个数,9个空格,产生9类
df['2020分层'] = pd.cut(df['2020'],bins,right=True)

#给重分类结果添加标签
bins = [0,100,200,300,500,700,900,1100,1300,max(Wpop2['2020'])]
df['2020分层'] = pd.cut(df['2020'],bins,right=True,labels=[1,2,3,4,5,6,7,8,9])

[Python] 变量重分类(连续变量重分类、离散变量重分类)_第1张图片

[Python] 变量重分类(连续变量重分类、离散变量重分类)_第2张图片

没有添加labels 添加了labels之后
#若要进一步统计各分段的频数
df['2020分层'].value_counts()
Out[1]: 
(1300.0, 109695.391]    2083
(0.0, 100.0]            1558
(100.0, 200.0]           893
(300.0, 500.0]           642
(500.0, 700.0]           537
(200.0, 300.0]           489
(700.0, 900.0]           408
(900.0, 1100.0]          320
(1100.0, 1300.0]         245
Name: 2020分层, dtype: int64

#若要进一步统计各分段的百分比
df['2020分层'].value_counts(normalize=True)
Out[2]: 
(1300.0, 109695.391]    0.290314
(0.0, 100.0]            0.217143
(100.0, 200.0]          0.124460
(300.0, 500.0]          0.089477
(500.0, 700.0]          0.074843
(200.0, 300.0]          0.068153
(700.0, 900.0]          0.056864
(900.0, 1100.0]         0.044599
(1100.0, 1300.0]        0.034146
Name: 2020分层, dtype: float64

1.2 等频重编码

案例 :一份df格式的2020年的人口数据,数值为连续型,最小值为0,最大值为109695.39。现在按照25%的数据为一类,分成4类。

# 等频重编码
k=4             # 将数据k等分
w = df['2020'].quantile(np.arange(0,1+1/k,1/k))    # 获得k等分的临界值
df['2020分层'] = pd.cut(df['2020'], w, right=True, labels=[1,2,3,4]) # 重分类 

w
Out[1]: 
0.00        13.161950
0.25       652.074890
0.50      1648.612183
0.75      4138.446777
1.00    112781.359375

 [Python] 变量重分类(连续变量重分类、离散变量重分类)_第3张图片

[Python] 变量重分类(连续变量重分类、离散变量重分类)_第4张图片

没有添加labels 添加了labels之后

2. 离散变量重分类

案例:先建立一个数据框,方便后面演示。我们的任务是,将性别用英文字母F、M表示。

df = pd.DataFrame([['张三','男','喜欢'],['李四','女','不喜欢'],['赵五','女','无所谓'],['王六','男','喜欢']])
df.columns=('姓名','性别','是否喜欢看电影')
df

Out[1]: 
   姓名 性别 是否喜欢看电影
0  张三  男      喜欢
1  李四  女     不喜欢
2  赵五  女     无所谓
3  王六  男      喜欢

2.1 分类后为1个指标

方法:通过设立字典的形式,采用【变量.map()】重编码

# 方法一,用设立字典的形式,采用【变量.map()】挨个重编码
size_mapping = {'男':'M','女':'F'}   # 也可以是数值型 size_mapping = {'男':'0','女':'1'}
df['性别'] = df['性别'].map(size_mapping) 

df
Out[2]: 
   姓名 性别 是否喜欢看电影
0  张三  M      喜欢
1  李四  F     不喜欢
2  赵五  F     无所谓
3  王六  M      喜欢

扩展:对应R语言car包中的recode()函数

R例子:df$nsex=recode(df$sex,"'男'='M';'女'='F';else=NA")

2.2 分类后为多个指标

另外,Python提供了一种可以可以把各个分类变量单独表示出来的形式,用【 pd.get_dummies(  )】函数实现。

a = pd.get_dummies(df['性别'])
df['Femal'] = a['女']
df['male'] = a['男']

a
Out[1]: 
   女  男
0  0  1
1  1  0
2  1  0
3  0  1

df
Out[2]: 
   姓名 性别 是否喜欢看电影  Femal  male
0  张三  男      喜欢       0      1
1  李四  女     不喜欢      1      0
2  赵五  女     无所谓      1      0
3  王六  男      喜欢       0      1

扩展阅读:

利用python将连续指标离散化,分类变量哑元化_weixin_30339969的博客-CSDN博客

你可能感兴趣的:(Python数据分析实战,python,分类,数据分析)