範囲ルックアップの様な処理

Pandas lookup value in a range from another table – StackOverflow

enter image description here

の様な処理を考える.Pandasで処理する場合,コメントの様にintervalindexとget_indexerで処理するのがリーズナブル.個人的には,Numpyでブロードキャストを用いる方がシンプルかなと.

import pandas as pd
import numpy as np


df1 = pd.DataFrame({'Date': {0: '06-01', 1: '06-02', 2: '06-03', 3: '06-04'},
                   'Value': {0: 3, 1: 7, 2: 9, 3: 16}, })

df2 = pd.DataFrame({'Start': {0: 1, 1: 6, 2: 11, 3: 16},
                    'Stop': {0: 5, 1: 10, 2: 15, 3: 20},
                    'Fruit': {0: 'Apple', 1: 'Orange', 2: 'Pear', 3: 'Mango'},})

v = df1['Value'].to_numpy()
m = (df2['Start'].to_numpy()<=v[:, None]) & (v[:, None]<=df2['Stop'].to_numpy())
df1.assign(Fruit=df2['Fruit'].to_numpy()[m.nonzero()[1]])
    Date    Value   Fruit
0   06-01   3   Apple
1   06-02   7   Orange
2   06-03   9   Orange
3   06-04   16  Mango
広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください