Bagaimana untuk Melaksanakan Gabungan Berasaskan Julat dengan Cekap dalam Panda?

Linda Hamilton
Lepaskan: 2024-11-02 00:19:02
asal
662 orang telah melayarinya

How to Efficiently Perform Range-Based Joins in Pandas?

Mengoptimumkan Cantuman Berasaskan Julat dalam Panda

Apabila bekerja dengan bingkai data, selalunya perlu melakukan cantuman berdasarkan keadaan julat. Pendekatan biasa dalam Pandas ialah membuat lajur tiruan, menyertainya dan menapis baris yang tidak diperlukan. Walau bagaimanapun, penyelesaian ini boleh menjadi mahal dari segi pengiraan, terutamanya untuk set data yang besar.

Nasib baik, terdapat cara yang lebih cekap dan elegan untuk mencapai gabungan berasaskan julat dalam Pandas.

Menggunakan Penyiaran numpy

Kaedah yang paling mudah ialah memanfaatkan penyiaran numpy. Ia melibatkan penukaran bingkai data Pandas kepada tatasusunan numpy dan menggunakan operasi boolean untuk mengenal pasti baris yang sepadan.

<code class="python">import numpy as np

a = A.A_value.values
bh = B.B_high.values
bl = B.B_low.values

i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh))

pd.concat([
    A.loc[i, :].reset_index(drop=True),
    B.loc[j, :].reset_index(drop=True)
], axis=1)</code>
Salin selepas log masuk

Pendekatan ini amat cekap kerana ia mengelakkan lelaran baris yang mahal.

Melanjutkan ke Kiri Menyertai

Untuk melanjutkan penyelesaian ini kepada gabungan kiri, kami boleh menambahkan baris yang tinggal daripada bingkai data A yang tidak sepadan dengan mana-mana baris dalam bingkai data B.

<code class="python">pd.concat([
    A.loc[i, :].reset_index(drop=True),
    B.loc[j, :].reset_index(drop=True)
], axis=1).append(
    A[~np.in1d(np.arange(len(A)), np.unique(i))],
    ignore_index=True, sort=False
)</code>
Salin selepas log masuk

Ini memastikan semua baris daripada bingkai data A disertakan dalam hasil, walaupun baris tersebut tidak mempunyai baris yang sepadan dalam bingkai data B.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Gabungan Berasaskan Julat dengan Cekap dalam Panda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!