0

私は2つのパンダデータフレームを持っています:

最初のフレームには、タイムスタンプ (日付 + 時間) と、地球上のボックスの角を定義する緯度と経度のペアの 4 つのセットが含まれています。

2 番目のフレームには、タイムスタンプと、イベントをマークする 1 つの緯度/経度のペアが含まれています。

イベントごとに、それが「地球上のボックス」のいずれかに収まったかどうか、もしそうなら、どのボックスとタイムスタンプ間の delta_t が何であるかを調べたいと思います。

これを行う唯一の方法は、2 番目のフレームを行ごとにループし、最初のフレームと比較することです。もっとpythonicな方法を望んでいますが、何も思い浮かびません。何か案は?

ありがとう、

SH

4

1 に答える 1

0

これは同様の質問です: pandas データフレームを反復処理する

これでうまくいくと思います。疑似タラ。0.11-dev が必要です

両方のフレームには日時インデックスがあり、A は最初のフレームであり、B はイベントのみを含むためはるかに短いです。

A で、インデックスを列として設定し、A['date'] = A.index

B で、インデックスを列として設定し、B['date'] = B.index

A と B を内部結合し、次に B を埋めます

C = A.join(B).ffill()

次に、イベントが含まれている場合は、次のようなブール論理が必要です。

C['is_included'] = (C['A_lat'] > C['B_lat']) & (C['A_long'] > C['B_long'])...etc 

したがって、is_included が True の場合、前のイベントからの差分時間が必要です。

B の元の日付列で、選択されていないイベントを nan に設定します。

C['date_B'][~C['is_included']] = np.nan

date_B をもう一度前方に入力します

C['date_B'] = C['date_B'].ffill()

date_A から date_B を減算すると、timedelta が得られると思います

C['delta'] = C['date_B']-C['date_A']

それから

C[C['is_included']] is your answer, and delta is the timedelta
于 2013-04-05T16:25:51.833 に答える