2017-11-30 19 views
0

をパンダに追加する私は、特定の列Bが値の最も近くにある別の行のインデックスまたは値を保存する(たとえば)データフレームに新しい列「近隣」を導入したい現在の行 など。最も近い値を持つ行を取得する

A Neighbor 
0 5 1 
1 4 0 
2 1 3 
3 2 2 
4 10 0 

あなたはパンダの機能を知っていますか?私のデータセットは非常に大きいので、残念ながら遅すぎます。

ありがとうございます!

+0

をリスト全体(A)、あなたは単にインデックス上で.shift()を実行できますか?索引を列として格納すると、シフト関数がこのように索引を引き出すことができます。 – boethius

答えて

1

使用しています方法です:あなたの並べ替えた場合

df['myindex'] = df.index 
# result = df.sort(['A']) 
result = df.sort_values(by='A') 
result['NeighborIndex'] = result['myindex'].shift(-1) 
+0

文書から: 種類:{'quicksort'、 'mergesort'、 'heapsort'}、デフォルト 'quicksort' ソートアルゴリズムの選択。詳細については、ndarray.np.sortも参照してください。 mergesortは唯一の安定したアルゴリズムです。 DataFramesの場合、このオプションは、単一の列またはラベルでソートする場合にのみ適用されます。 – boethius

+0

並べ替えを最初に行うと、ソートを行う最適化を得ることができないか、パフォーマンスが低下することなくソートされていないリストをスキャンすることができない限り、n^2最悪の場合のランタイムを避けることができます。 – boethius

+0

100万の行DBなどでこれを行うことを検討してください。 – boethius

1

IDK、あなたの前の質問のための私の更新の答えを確認するかどうか、これは私がこのような何かトリック行う可能性があります

a=df.A.values[:,None]-df.A.values 
np.fill_diagonal(a, 9999999) 
np.argmin(abs(a),0) 
Out[1160]: array([1, 0, 3, 2, 0], dtype=int64) 
+0

ありがとう、私はちょうど見た!これはうまくいくものですが、まだまだ遅くて「ハッキー」な気がします。 – Gemini

+1

@ジェミニあなたがnumpyが遅いと思えば........あなたはそれを試すことができます...いつもパンダよりも速いです。 – Wen

関連する問題