2017-07-20 11 views
1

を、私は列が辞書の値に単語のいずれかを持っているかどうかを確認する必要があり、その後、私は、キーを返す必要があります。パンダ値は辞書で検索し、キーを返すために - のpython私のパンダのデータフレームの列で

my_dict = {'woodhill': ["woodhill"],'woodcocks': ["woodcocks"], 'whangateau' : ["whangateau","whangate"],'whangaripo' : ["whangaripo","whangari","whangar"], 
       'westmere' : ["westmere"],'western springs': ["western springs","western springs","western spring","western sprin", 
"western spri","western spr","western sp","western s"]} 

私は、しかし、私は私のデータフレームにはほぼ150万レコードを持っているし、辞書には、100の以上の項目があり、それぞれがいくつかのケースでは、最大20の値を有していてもよく、このためのループのために書くことができます。どのようにこれを効率的に行うのですか?キーとして値を逆にして辞書に値としてキーを作成して速くすることはできますか?ありがとう。

答えて

1

最初の逆の辞書項目です。 #制限されたアイテムとして、#速くなるでしょう。

第二は、辞書からのデータフレームを作成します。 #データフレームと比較するたびにすべてのキーを検索する代わりに、結合を行うのが一番です。そのためにデータフレームを作成します。左

第三makeが(この場合、辞書内の)小さなサイズのデータ​​フレームに大きなサイズのデータ​​フレームから参加します。

+0

データフレームの列が正確に辞書値ではないため、私はここで結合することはできません。列の値は '西の春の道西の春'、 '王の道西の春'、 'テスト値'のようになります。 –

+0

oh .. 1回目の操作の後、データフレームに "IN"演算を使用してマップを使用します。 .ilocを使用することを忘れないでください!!もう一度 "IN"操作を行っている間に "ANY"を実行するとより速いパフォーマンスが得られます。 –

2

あなたは

reversed_dict = {val: key for key in my_dict for val in my_dict[key]} 

あなたの辞書を逆にして、これはあなたを助けるかもしれない、このコードを試してみてください、あなたのデータフレームで

df =pd.DataFrame({'col1':['western springs','westerns','whangateau','whangate']}) 
df['col1'] = df['col1'].map(reversed_dict) 

をマッピングすることができます。

+0

こんにちは。お返事をありがとうございます。しかし私のデータフレームはこのようにはなりません。これはdf = pd.DataFrame({col1:['western springs'、 'western s']})のようになります。申し訳ありませんが、私はこれについて言及しませんでした –

+0

辞書値が一致する場合は、列の値を辞書キーで置き換えますか? –

+0

はいそうです。申し訳ありませんが私は明確でない場合。 –

関連する問題