Pandas cut 関数

Suraj Joshi 2023年1月30日 2021年3月5日
  1. pandas.cut() 関数の構文
  2. 例:pandas.cut() メソッドを用いて DataFrame の列の値をビンに分散する
  3. 例:pandas.cut() メソッドを用いたビンへの値の分配と各ビンへのラベルの割り当て
  4. 例:pandas.cut() メソッドで retbins=True を設定してビンの値を返する
Pandas cut 関数

pandas.cut() 関数は、与えられたデータを bins とも呼ばれる範囲に分散させることができます。

この記事では以下の DataFrame を使うことにします。

import pandas as pd

df = pd.DataFrame({
    'Name': ["Anish","Birat","Chirag","Kabin","Sachin"],
    'Age':  [23,34,38,45,27],
    'Score': [316, 322, 332, 330,325],
})

print(df)

出力:

     Name  Age  Score
0   Anish   23    316
1   Birat   34    322
2  Chirag   38    332
3   Kabin   45    330
4  Sachin   27    325

pandas.cut() 関数の構文

pandas.cut(x,
           bins,
           right=True,
           labels=None,
           retbins=False,
           precision=3,
           include_lowest=False,
           duplicates='raise',
           ordered=True)

パラメータ

x 与えられた配列
bins データをビンに入れる基準
right 論理値。True ならば、ビンの右端の番号も含める。
labels 配列。ビンのラベル。
retbins ブール値。True ならば、ビンを返します。
precision 整数。ビンを格納して表示する精度
ordered 論理値。True の場合、結果のラベルは

戻り値

これは配列 x の各要素のビンの値からなる配列を返します。また、retbins=True を設定している場合はビンの値も返します。

例:pandas.cut() メソッドを用いて DataFrame の列の値をビンに分散する

import pandas as pd

df = pd.DataFrame({
    'Name': ["Anish","Birat","Chirag","Kabin","Sachin"],
    'Age':  [23,34,38,45,27],
    'Score': [316, 322, 332, 330,325],
})

print("Initial DataFrame:")
print(df,"\n")

df['Age-Range'] = pd.cut(x=df['Age'], bins=[20,30,40,50])

print("DataFrame with Age-Range:")
print(df)

出力:

Initial DataFrame:
     Name  Age  Score
0   Anish   23    316
1   Birat   34    322
2  Chirag   38    332
3   Kabin   45    330
4  Sachin   27    325

DataFrame with Age-Range:
     Name  Age  Score Age-Range
0   Anish   23    316  (20, 30]
1   Birat   34    322  (30, 40]
2  Chirag   38    332  (30, 40]
3   Kabin   45    330  (40, 50]
4  Sachin   27    325  (20, 30]

データフレーム dfAge 列の値を、pandas.cut() メソッドの bins 引数の値を用いて計算した年齢範囲に分離し、最終的に各行の Age-Range の値を含むデータフレームを表示します。

ここで、(20,30] は、20 を除き、30 を含む 20 から 30 までの値を表します。

例:pandas.cut() メソッドを用いたビンへの値の分配と各ビンへのラベルの割り当て

デフォルトでは、各ビンに割り当てられるラベルはビンの範囲になります。カスタムのビンラベルを設定するには、関数 pandas.cut()labels パラメータを用います。

import pandas as pd

df = pd.DataFrame({
    'Name': ["Anish","Birat","Chirag","Kabin","Sachin"],
    'Age':  [23,34,38,45,27],
    'Score': [316, 322, 332, 330,325],
})

print("Initial DataFrame:")
print(df,"\n")

bin_labels=labels=['21 to 30', '31 to 40', '41 to 50']
df['Age-Range'] = pd.cut(x=df['Age'], bins=[20,30,40,50],labels=bin_labels)

print("DataFrame with Age-Range:")
print(df)

出力:

Initial DataFrame:
     Name  Age  Score
0   Anish   23    316
1   Birat   34    322
2  Chirag   38    332
3   Kabin   45    330
4  Sachin   27    325

DataFrame with Age-Range:
     Name  Age  Score Age-Range
0   Anish   23    316  21 to 30
1   Birat   34    322  31 to 40
2  Chirag   38    332  31 to 40
3   Kabin   45    330  41 to 50
4  Sachin   27    325  21 to 30

これは Age カラムの各値をビンに割り当て、それぞれのビンにラベルを追加します。

例:pandas.cut() メソッドで retbins=True を設定してビンの値を返する

import pandas as pd

df = pd.DataFrame({
    'Name': ["Anish","Birat","Chirag","Kabin","Sachin"],
    'Age':  [23,34,38,45,27],
    'Score': [316, 322, 332, 330,325],
})

print("Initial DataFrame:")
print(df,"\n")

bin_labels=labels=['21 to 30', '31 to 40', '41 to 50']
df['Age-Range'],bin_values= pd.cut(x=df['Age'], bins=[20,30,40,50],labels=bin_labels,retbins=True)

print("DataFrame with Age-Range:")
print(df,"\n")

print("The bin values are:")
print(bin_values)

出力:

Initial DataFrame:
     Name  Age  Score
0   Anish   23    316
1   Birat   34    322
2  Chirag   38    332
3   Kabin   45    330
4  Sachin   27    325

DataFrame with Age-Range:
     Name  Age  Score Age-Range
0   Anish   23    316  21 to 30
1   Birat   34    322  31 to 40
2  Chirag   38    332  31 to 40
3   Kabin   45    330  41 to 50
4  Sachin   27    325  21 to 30

The bin values are:
[20 30 40 50]

DataFrame に Age-Range の値と bin の値を表示します。

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame