pandas基础:使用between方法进行数据分箱(Binning Data)

2022-06-04 09:41:29 浏览数 (2)

标签:pandas,between方法

有时候,我们需要执行数据分箱操作,pandas的between方法可以帮助我们实现这个目的。数据分箱(Databinning)是指我们将数据放入离散区间或段/箱的过程。

我们将创建一些随机样本,显示100人的年龄及其货币净值。然后,我们将按年龄将数据存储到不同的“存储箱”中。

import pandas as pd

import numpy as np

age= np.random.randint(0,121,size=100)

net_worth= np.random.randint(100,10000,size=100)

df= pd.DataFrame({'Age':age, 'Net_Worth':net_worth})

结果如下图1所示。

图1

pandas的between方法检查数据是否在两个值之间,其语法为:

between(left,right,inclusive=’both’)

其中,

  • 参数left,分段/范围的下端点。
  • 参数right,分段/范围的上端点。
  • 参数inclusive,是否想要包括下端点和上端点,可以取下列值:both,neither,left或right。

该方法返回一个布尔索引,其中包含True和False值的列表。

让我们检查哪个记录的年龄介于0到20岁之间:

df['Age'].between(0,20, inclusive='right')

图2

可能注意到between方法实质上等同于:

(df['Age']> 0) & (df['Age'] <= 20)

图3

现在,可以借助布尔索引检查数据是否在一个分段内,还需要使用loc方法来访问/赋值符合条件的单个记录的值。注意,NaN值是因为尚未为其指定band列。

df.loc[df['Age'].between(left=0,right=20, inclusive='right'),

'band']= '(0, 20]'

图4

基本上,loc属性只返回与条件匹配的记录,即布尔索引中的True值。参见下面的示例,该示例仅返回0到20年前的记录。

df.loc[df['Age'].between(left=0,right=20,inclusive='right')]

图5

假设我们要将所有数据放入以下年龄段中。注:括号“()”表示不包含,方括号“[]”表示包含,因此(0,20]是指从1岁到20岁。

(0,20]

(20,60]

(60,90]

(90,120]

代码:

#年龄间隔

age_band= [0,20,60,90,120]

#创建年龄段

age_bins= []

for i in range(4):

age_bins.append([age_band[i],age_band[i 1]])

[[0,20],[20,60], [60,90], [90,120]]

#分箱数据

for b in age_bins:

df.loc[df['Age'].between(left=b[0],right=b[1],inclusive='right'),'band']= f'({b[0]},{b[1]}]'

结果如下图6所示。

图6

不幸的是,使用between和loc方法无法轻松地将数据装箱。虽然使用循环并不太糟糕,但在处理大量的分箱时,这种方法可能会变得效率低下,因为需要将该过程重复N次(箱子数量)。获取分箱数据的一种更简单的方法是使用pandas的cut方法,具体参见:《Pandas基础:使用Cut方法进行数据分箱(Binning Data)》。

注:本文学习整理自pythoninoffice.com,供有兴趣的朋友参考。

0 人点赞