Pandas cut()函数示例

时间:2020-02-23 14:42:05  来源:igfitidea点击:

1.Pandas cut()函数

Pandas cut()函数用于将数组元素分离到单独的bin中。
cut()函数仅适用于类似一维数组的对象。

2.Pandas cut()函数的用法

当我们有大量标量数据并且想要对其进行一些统计分析时,cut()函数很有用。

例如,假设我们有一个1到20之间的数字数组。
我们想将它们分为(1,10]和(10,20]的两个bin,并添加" Low"和" Highs"之类的标签。
可以使用pandas cut()函数轻松地执行此操作。

此外,我们可以对特定bin元素和label元素执行功能。

3. Pandas cut()函数语法

cut()函数的语法为:

cut(
  x,
  bins,
  right=True,
  labels=None,
  retbins=False,
  precision=3,
  include_lowest=False,
  duplicates="raise",
)
  • x是要合并的输入数组。
    它必须是一维的。

  • bin定义用于分割的bin边缘。

  • right指示是否包括最右边的边缘,默认值为True。

  • 标签用于为返回的垃圾箱指定标签。

  • retbins指定是否返回垃圾箱。

  • precision指定存储和显示垃圾箱标签的精度。

  • include_lowest指定第一个间隔是否应该为左包含。

  • 重复项专门说明如果垃圾箱边缘不唯一时该怎么做,是引发ValueError还是丢弃非唯一变量。

4. Pandas cut()函数示例

让我们看一下pandas cut()函数的一些示例。
我将使用NumPy生成随机数以填充" DataFrame"对象。

4.1)将段号划分为垃圾箱

import pandas as pd
import numpy as np

df_nums = pd.DataFrame({'num': np.random.randint(1, 100, 10)})
print(df_nums)

df_nums['num_bins'] = pd.cut(x=df_nums['num'], bins=[1, 25, 50, 75, 100])
print(df_nums)

print(df_nums['num_bins'].unique())

输出:

num
0   80
1   40
2   25
3    9
4   66
5   13
6   63
7   33
8   20
9   60

 num   num_bins
0   80  (75, 100]
1   40   (25, 50]
2   25    (1, 25]
3    9    (1, 25]
4   66   (50, 75]
5   13    (1, 25]
6   63   (50, 75]
7   33   (25, 50]
8   20    (1, 25]
9   60   (50, 75]

[(75, 100], (25, 50], (1, 25], (50, 75]]
Categories (4, interval[int64]): [(1, 25] < (25, 50] < (50, 75] < (75, 100]]

请注意,25是bin(1,25]的一部分。
这是因为默认情况下包含最右边。
如果您不希望这样做,则将right = False参数传递给cut()函数。

4.2)将标签添加到垃圾箱

import pandas as pd
import numpy as np

df_nums = pd.DataFrame({'num': np.random.randint(1, 20, 10)})
print(df_nums)

df_nums['nums_labels'] = pd.cut(x=df_nums['num'], bins=[1, 10, 20], labels=['Lows', 'Highs'], right=False)

print(df_nums)

print(df_nums['nums_labels'].unique())

由于我们希望10成为高点的一部分,因此我们在cut()函数调用中指定right = False。

输出:

num
0    5
1   16
2    6
3   13
4    2
5   10
6   18
7   10
8    2
9   18

 num nums_labels
0    5        Lows
1   16       Highs
2    6        Lows
3   13       Highs
4    2        Lows
5   10       Highs
6   18       Highs
7   10       Highs
8    2        Lows
9   18       Highs

[Lows, Highs]
Categories (2, object): [Lows < Highs]