Ada jawaban yang bagus, terutama dibuat oleh penulis dari kedua alat yang ditanyakan. Jawaban Matt menjelaskan kasus yang dilaporkan dalam pertanyaan, bahwa itu disebabkan oleh bug, dan bukan gabungan algoritma. Bug diperbaiki pada hari berikutnya, lebih dari 7 tahun yang lalu sudah.
Dalam jawaban saya, saya akan memberikan beberapa waktu up-to-date operasi penggabungan untuk data.table dan panda. Perhatikan bahwa penggabungan plyr dan basis R tidak termasuk.
Pengaturan waktu yang saya sajikan berasal dari proyek db-benchmark , tolok ukur yang dapat terus-menerus dijalankan. Ini meningkatkan alat ke versi terbaru dan menjalankan kembali skrip patokan. Ini menjalankan banyak solusi perangkat lunak lainnya. Jika Anda tertarik dengan Spark, Dask dan beberapa lainnya pastikan untuk memeriksa tautannya.
Sampai sekarang ... (masih harus diimplementasikan: satu ukuran data lagi dan 5 pertanyaan lagi)
Kami menguji 2 ukuran data yang berbeda dari tabel LHS.
Untuk masing-masing ukuran data tersebut kami menjalankan 5 pertanyaan penggabungan berbeda.
Q1: LHS bergabung dalam RHS- kecil di bilangan bulat
q2: LHS bergabung dalam RHS-media di bilangan bulat
Q3: LHS luar bergabung RHS-media di bilangan bulat
Q4: LHS bergabung dalam RHS menengah atas faktor (kategoris)
Q5: LHS bergabung dalam RHS- besar pada integer
Meja RHS terdiri dari 3 ukuran berbeda
- kecil diterjemahkan menjadi ukuran LHS / 1e6
- media diterjemahkan ke ukuran LHS / 1e3
- besar artinya ukuran LHS
Dalam semua kasus ada sekitar 90% baris yang cocok antara LHS dan RHS, dan tidak ada duplikat dalam kolom gabungan RHS (tidak ada produk kartesius).
Sampai sekarang (berjalan pada 2 November 2019)
panda 0.25.3 dirilis pada 1 November 2019
data.tabel 0.12.7 (92abb70) dirilis pada 2 November 2019
Pengaturan waktu di bawah ini dalam detik, untuk dua ukuran data LHS yang berbeda. Kolom pd2dt
ditambahkan rasio penyimpanan bidang berapa kali panda lebih lambat dari data.tabel.
+-----------+--------------+----------+--------+
| question | data.table | pandas | pd2dt |
+-----------+--------------+----------+--------+
| q1 | 0.51 | 3.60 | 7 |
| q2 | 0.50 | 7.37 | 14 |
| q3 | 0.90 | 4.82 | 5 |
| q4 | 0.47 | 5.86 | 12 |
| q5 | 2.55 | 54.10 | 21 |
+-----------+--------------+----------+--------+
+-----------+--------------+----------+--------+
| question | data.table | pandas | pd2dt |
+-----------+--------------+----------+--------+
| q1 | 6.32 | 89.0 | 14 |
| q2 | 5.72 | 108.0 | 18 |
| q3 | 11.00 | 56.9 | 5 |
| q4 | 5.57 | 90.1 | 16 |
| q5 | 30.70 | 731.0 | 23 |
+-----------+--------------+----------+--------+
data.table
hanya mewarisi daridata.frame
, tetapi bergantung pada kode-C di bawah tenda.