numpyのアレイを含むデータフレーム列の各行の最大値を探す次パイソンパンダ:パンダデータフレームは次のように見ている私が得
values max_val_idx
0 np.array([-0.649626, -0.662434, -0.611351]) 2
1 np.array([-0.994942, -0.990448, -1.01574]) 1
2 np.array([-1.012, -1.01034, -1.02732]) 0
df['values']
3つの要素
の固定長のnumpyの配列を含んでいますdf['max_val_idx]
は、対応するアレイの各アレイの最大要素のインデックスが既に与えられているので
の最大値のインデックス、各エントリの最大値を抽出するための最も効率的な方法は何が含まれていますか?
私はデータが幾分愚かに保存されていることを知っていますが、私はそれを自分で作成しませんでした。そして、処理するデータがたくさんあるので(+ 50GB、同様の方法で保存された何百ものピクルスデータベース)、私は最も時間効率の良い方法が何かを知りたいと思います。
は、これまでのところ私はdf['max_val_idx]
の各要素をループしようとしたとdf['values']
で見つかった各配列のインデックスとして使用:
max_val = []
for idx, values in enumerate(df['values']):
max_val.append(values[int(df['max_val_idx'].iloc[idx])])
は、任意の速いこれに代わるありますか?
numpyのバージョンがDataFrameの基礎となる構造をより有効に活用できるので、値にPythonの組み込み 'max 'を適用するのではなく、' np.max(df、axis = 1) 'を使うのが有利かもしれません。 –
私はちょうど試しましたが、それは良い提案です、そして、それはより遅かった - 私はなぜ分かりません。 – JohnE
@JohnE:答えをありがとう。両方のソリューションを素早くテストした後、最初の方法は約20倍高速で、バリュー・アレーが大きくなるとより良いスケールになるようです。現時点では、「値」列から1つの数値だけを抽出するよりも、データで何もする必要はありません。しかし、あなたの2番目の方法を念頭に置いておきます。または単に最大値を選択する代わりに、idx-columnで指定された値を選択する必要があるかどうかを確認します。 – Jannick