Pandas で IntervalArray を作成する: from_arrays 関数と代替方法


この関数を使用する利点

  • 重複するデータ処理を効率化できます。
  • データ分析や可視化を簡素化できます。
  • 複雑な数値範囲を簡単に表現できます。

関数の引数

  • right: 右端の値の配列
  • left: 左端の値の配列

関数の戻り値

  • IntervalArray: 左端と右端の値から作成された IntervalArray


import pandas as pd

left = [1, 2, 3]
right = [4, 5, 6]

interval_array = pd.arrays.IntervalArray.from_arrays(left, right)

print(interval_array)

出力

[Interval(1, 4), Interval(2, 5), Interval(3, 6)]

この例では、left 配列と right 配列から IntervalArray が作成されています。IntervalArray は、3つの要素を持ち、それぞれ [1, 4], [2, 5], [3, 6] という範囲を表しています。

IntervalArray.from_arrays 関数は、様々な用途で使用できます。例えば、以下のことができます。

  • 範囲内のデータに基づいて可視化を作成する
  • 範囲内のデータを集計する
  • 特定の範囲内のデータを選択する
  • IntervalArray は Pandas 0.23 以降で使用できます。
  • Pandas arrays には、IntervalArray以外にも様々なデータ型があります。詳細は Pandas ドキュメントを参照してください。


特定の範囲内のデータを選択する

この例では、IntervalArray を使って、特定の範囲内のデータを選択します。

import pandas as pd

df = pd.DataFrame({'data': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})
left = [2, 5, 8]
right = [5, 8, 11]

interval_array = pd.arrays.IntervalArray.from_arrays(left, right)
selected_data = df[df['data'].isin(interval_array)]

print(selected_data)

出力

   data
0   3
1   6
2   9

df['data'].isin(interval_array) 操作によって、data 列の値がこの IntervalArray のいずれかに属する行のみが選択されます。

範囲内のデータを集計する

この例では、IntervalArray を使って、範囲内のデータを集計します。

import pandas as pd

df = pd.DataFrame({'data': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                   'group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C']})
left = [2, 5, 8]
right = [5, 8, 11]

interval_array = pd.arrays.IntervalArray.from_arrays(left, right)
grouped_data = df.groupby('group')['data'].agg(sum)

for interval, count in grouped_data.items():
    print(f"Interval: {interval}, Count: {count}")

出力

Interval: [2, 5], Count: 9
Interval: [5, 8], Count: 12
Interval: [8, 11], Count: 7

df.groupby('group')['data'].agg(sum) 操作によって、各グループの data 列の値がこの IntervalArray のいずれかの範囲に属するものの合計が計算されます。

この例では、IntervalArray を使って、範囲内のデータに基づいて可視化を作成します。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'data': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                   'group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C']})
left = [2, 5, 8]
right = [5, 8, 11]

interval_array = pd.arrays.IntervalArray.from_arrays(left, right)

for interval, group_data in df.groupby('group'):
    plt.hist(group_data['data'], bins=interval_array)
    plt.title(f"Group: {group}")
    plt.show()


Interval オブジェクトのリストから作成する

import pandas as pd

intervals = [pd.Interval(1, 4), pd.Interval(2, 5), pd.Interval(3, 6)]
interval_array = pd.arrays.IntervalArray(intervals)

print(interval_array)

出力

[Interval(1, 4), Interval(2, 5), Interval(3, 6)]

この例では、Interval オブジェクトのリストから IntervalArray が作成されています。

tuples のリストから作成する

import pandas as pd

tuples = [(1, 4), (2, 5), (3, 6)]
interval_array = pd.arrays.IntervalArray.from_tuples(tuples)

print(interval_array)

出力

[Interval(1, 4), Interval(2, 5), Interval(3, 6)]

この例では、tuples のリストから IntervalArray が作成されています。

固定周波数の IntervalIndex から作成する

import pandas as pd

index = pd.IntervalIndex.from_breaks([0, 1, 2, 3, 4, 5, 6], closed='right')
interval_array = pd.arrays.IntervalArray(index)

print(interval_array)

出力

[Interval(0, 1], Interval(1, 2], Interval(2, 3], Interval(3, 4], Interval(4, 5], Interval(5, 6]]

この例では、固定周波数の IntervalIndex から IntervalArray が作成されています。

cut 関数を使って作成する

import pandas as pd

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
bins = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
interval_array = pd.cut(data, bins)

print(interval_array)

出力

[Interval(1, 2], Interval(2, 3], Interval(3, 4], Interval(4, 5], Interval(5, 6], Interval(6, 7], Interval(7, 8], Interval(8, 9], Interval(9, 11], Interval(9, 11]]

この例では、cut 関数を使って、data 配列の値を bins 配列で指定された範囲に分割し、IntervalArray を作成しています。

  • データを特定の範囲に分割する必要がある場合は、の方法が最適です。
  • 固定周波数のデータがある場合は、の方法が最適です。
  • tuples のリストがある場合は、の方法が最適です。
  • 既に Interval オブジェクトのリストがある場合は、の方法が最適です。
  • geopandas パッケージを使用すると、地理空間データ用の IntervalArray を作成できます。
  • pandas-gbq パッケージを使用すると、Google BigQuery から IntervalArray を読み込むことができます。