私は2つのパンダデータフレームAとBを持っています。2つのパンダのデータフレームの行を比較する最速の方法は?
Aは存在または不在を示すバイナリ値で埋められています。
Bは、1024行×10列であり、0と1の完全な反復であり、したがって1024行を有する。
Aの特定の10桁のAのどの行がBの特定の行に対応しているかを調べようとしています。要素ごとではなく、全体の行が一致する必要があります。
例えば、私は
A[(A.ix[:,(1,2,3,4,5,6,7,8,9,10)==(1,0,1,0,1,0,0,1,0,0)).all(axis=1)]
は、それらの特定の列(1,2,3,4,5,6,7,8,9,10)
でBのそれ(1,0,1,0,1,0,0,1,0,0)
行とマッチアップしている行(3,5,8,11,15)
何かを返したいだろうと私はすべての上でこれをやりたいですB.内の行 私はこれを行うために見つけ出すことができる最高の方法は:
import numpy as np
for i in B:
B_array = np.array(i)
Matching_Rows = A[(A.ix[:,(1,2,3,4,5,6,7,8,9,10)] == B_array).all(axis=1)]
Matching_Rows_Index = Matching_Rows.index
これを1つのインスタンスではひどいわけではありませんが、私はそれを約2万回実行するwhileループで使用します。したがって、かなり減速します。
私はDataFrame.applyを使いこなしていません。仕事をよりよくマッピングできるか?
私はPythonにはかなり新しいですが、誰かが明らかに効率的であると思っていただけです。
ありがとうございます。
Aの1つの行にBの一致が複数存在する可能性があります。したがって、Aの特定の行に少なくとも1つの一致が欲しいですか?それとも、col1-col10間のマッチを、Aの投稿コードだけで判断して探していますか? – Divakar
一致する行はどうしますか?私はあなたがBを完全に避けて、興味のある10列に 'groupby'を使うことができるようです。 –
私は、一致する行に基づいてエントロピー値を計算しようとしています。 –