データフレーム内の検索インデックスを改善する方法

フェデリコカッチャ

タイムスタンプインデックスを持つパンダデータフレームが与えられ、ソートされます。ラベルがあり、そのラベルに最も近いインデックスを見つける必要があります。また、小さいタイムスタンプを見つける必要があるため、検索はマイナータイムスタンプで計算する必要があります。これが私のコードです:

import pandas as pd
import datetime

data = [i for i in range(100)]
dates = pd.date_range(start="01-01-2018", freq="min", periods=100)
dataframe = pd.DataFrame(data, dates)

label = "01-01-2018 00:10:01"
method = "pad"
tol = datetime.timedelta(seconds=60)
idx = dataframe.index.get_loc(key=label, method="pad", tolerance=tol)

print("Closest idx:"+str(idx))
print("Closest date:"+str(dataframe.index[idx]))

検索が遅すぎます。それを改善する方法はありますか?

user3483203

パフォーマンスを向上させるために、検索対象を変換することをお勧めします。を使用する代わりにget_locDateTimeIndexをUnix Timeに変換np.searchsortedし、基になるnumpy配列で使用できます(名前が示すように、これにはソートされたインデックスが必要です)。


get_loc

(あなたの現在のアプローチ)

label = "01-01-2018 00:10:01"
tol = datetime.timedelta(seconds=60)
idx = dataframe.index.get_loc(key=label, method="pad", tolerance=tol)
print(dataframe.iloc[idx])

0    10
Name: 2018-01-01 00:10:00, dtype: int64

そしてそれはタイミングです:

%timeit dataframe.index.get_loc(key=label, method="pad", tolerance=tol)
2.03 ms ± 81.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

np.searchsorted

arr = df.index.astype(int)//10**9
l = pd.to_datetime(label).timestamp()
idx = np.max(np.searchsorted(arr, l, side='left')-1, 0)
print(dataframe.iloc[idx])

0    10
Name: 2018-01-01 00:10:00, dtype: int64

そしてタイミング:

%timeit np.max(np.searchsorted(arr, l, side='left')-1, 0)
56.6 µs ± 979 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

(最初の配列作成は一度行う必要があるため、セットアップコストは含めませんでした。その後、すべてのクエリに使用しますが、セットアップコストを含めたとしても、この方法の方が高速です):

%%timeit
arr = df.index.astype(int)//10**9
l = pd.to_datetime(label).timestamp()
np.max(np.searchsorted(arr, l, side='left')-1, 0)

394 µs ± 3.84 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

上記の方法で、の許容範囲は強制されません60s、これを確認するのは簡単です。

>>> np.abs(arr[idx]-l)<60
True

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

あるデータフレームを使用して別のデータフレームの値とインデックスを検索する方法

分類Dev

パンダ-データフレームインデックスを使用して値を検索する方法

分類Dev

列データフレームの値を使用して列インデックスを検索する

分類Dev

R - あるデータフレームから要素のインデックスを検索し、別のデータフレームに配置する

分類Dev

条件ごとにデータフレーム内の行と列のすべてのインデックスを検索する

分類Dev

pandasデータフレームで連続するものの開始インデックスと終了インデックスを検索します

分類Dev

データフレームの各行の要素の列インデックスを検索します

分類Dev

データフレームの特定の列で最大値の行インデックスを検索します

分類Dev

Pandasデータフレームで最新のDateTimeのインデックスを検索します

分類Dev

データフレーム列で重複値のインデックスを検索します

分類Dev

データフレーム内の現在のインデックスからの逆検索

分類Dev

別のデータフレームの行からの条件に基づいて、あるデータフレームの行インデックスを検索することをベクトル化する方法

分類Dev

文字比較に基づいてデータフレーム内の要素のインデックスを検索します(例:greplを使用)

分類Dev

findall()関数を使用して、いくつかの条件でデータフレーム内のインデックスを検索します

分類Dev

データフレームのリストでアイテムを検索してカウントする方法

分類Dev

Pythonでデータフレームの要素のリストに対応するインデックスのリストを検索する

分類Dev

特定のセレクターの子孫内でインデックスを検索する

分類Dev

データフレーム全体で特定の値を検索し、その列と行のインデックスを返す方法

分類Dev

ダブルインデックスのGroupbyデータフレームで最小値の内部インデックスを検索します

分類Dev

パンダを使用して、データフレーム列で厳密に一致する値のインデックスを検索します

分類Dev

データフレームで日付を検索し、それらの日付のインデックスを取得する

分類Dev

関連する列名とインデックスを使用して、データフレームの最大値を検索します

分類Dev

条件を満たすパンダデータフレーム内のデータのインデックスと列を見つける方法は?

分類Dev

Rの関数内のデータフレーム列にインデックスを付ける方法

分類Dev

マルチインデックスデータフレームからのデータの検索と処理

分類Dev

同じインデックス、pythonで最小値を持つデータフレームの行を検索する

分類Dev

単一の列による階層インデックスを持つPandasデータフレームを検索します

分類Dev

インデックス行とデータフレーム内のすべての行の間の一般的な非NULL列の検索

分類Dev

Pandasデータフレーム列内の特定のテキストを検索する方法は?

Related 関連記事

  1. 1

    あるデータフレームを使用して別のデータフレームの値とインデックスを検索する方法

  2. 2

    パンダ-データフレームインデックスを使用して値を検索する方法

  3. 3

    列データフレームの値を使用して列インデックスを検索する

  4. 4

    R - あるデータフレームから要素のインデックスを検索し、別のデータフレームに配置する

  5. 5

    条件ごとにデータフレーム内の行と列のすべてのインデックスを検索する

  6. 6

    pandasデータフレームで連続するものの開始インデックスと終了インデックスを検索します

  7. 7

    データフレームの各行の要素の列インデックスを検索します

  8. 8

    データフレームの特定の列で最大値の行インデックスを検索します

  9. 9

    Pandasデータフレームで最新のDateTimeのインデックスを検索します

  10. 10

    データフレーム列で重複値のインデックスを検索します

  11. 11

    データフレーム内の現在のインデックスからの逆検索

  12. 12

    別のデータフレームの行からの条件に基づいて、あるデータフレームの行インデックスを検索することをベクトル化する方法

  13. 13

    文字比較に基づいてデータフレーム内の要素のインデックスを検索します(例:greplを使用)

  14. 14

    findall()関数を使用して、いくつかの条件でデータフレーム内のインデックスを検索します

  15. 15

    データフレームのリストでアイテムを検索してカウントする方法

  16. 16

    Pythonでデータフレームの要素のリストに対応するインデックスのリストを検索する

  17. 17

    特定のセレクターの子孫内でインデックスを検索する

  18. 18

    データフレーム全体で特定の値を検索し、その列と行のインデックスを返す方法

  19. 19

    ダブルインデックスのGroupbyデータフレームで最小値の内部インデックスを検索します

  20. 20

    パンダを使用して、データフレーム列で厳密に一致する値のインデックスを検索します

  21. 21

    データフレームで日付を検索し、それらの日付のインデックスを取得する

  22. 22

    関連する列名とインデックスを使用して、データフレームの最大値を検索します

  23. 23

    条件を満たすパンダデータフレーム内のデータのインデックスと列を見つける方法は?

  24. 24

    Rの関数内のデータフレーム列にインデックスを付ける方法

  25. 25

    マルチインデックスデータフレームからのデータの検索と処理

  26. 26

    同じインデックス、pythonで最小値を持つデータフレームの行を検索する

  27. 27

    単一の列による階層インデックスを持つPandasデータフレームを検索します

  28. 28

    インデックス行とデータフレーム内のすべての行の間の一般的な非NULL列の検索

  29. 29

    Pandasデータフレーム列内の特定のテキストを検索する方法は?

ホットタグ

アーカイブ