私はPythonでいくつかのRコードを書き直そうとしていますが、ある特定のビットを越えることはできません。私は、foverlaps
関数が時間ベースの結合を実行する際に非常に便利であることを発見しましたが、Python3でも同様に機能するものは見つかりませんでした。R foverlaps相当のPython
あるテーブルのtime
が別のテーブルのstart_time
とend_time
の間にある2つのデータテーブルを結合しています。 2つのテーブルの周期性は同じではありません。table_A
は1秒ごとに発生し、各間隔で複数のエントリを持つことができます。table_B
は、不規則な間隔で0〜10分ごとに1つのエントリを持ちます。
# Add dummy column to use with foverlaps
table_A <- table_A[, dummy := time]
# Set keys
setkey(table_B, x, y, start_time, end_time)
setkey(table_A, x, y, time, dummy)
# Join tables based on time
joined <- foverlaps(table_A, table_B, type = "within", by.x=c("x", "y", "time", "dummy"), by.y=c("x", "y", "start_time", "end_time"), nomatch=0L)[, dummy := NULL]
> head(table_A)
time x y dummy
1: 2016-07-11 11:52:27 4077 1 2016-07-11 11:52:27
2: 2016-07-11 11:52:27 4077 1 2016-07-11 11:52:27
3: 2016-07-11 11:52:27 4077 1 2016-07-11 11:52:27
4: 2016-07-11 11:52:27 4077 1 2016-07-11 11:52:27
5: 2016-07-11 11:52:32 4077 1 2016-07-11 11:52:32
6: 2016-07-11 11:52:32 4077 1 2016-07-11 11:52:32
> head(table_B)
x y start_time end_time
1: 6183 1 2016-07-11 12:00:45 2016-07-11 12:00:56
2: 6183 1 2016-07-11 12:01:20 2016-07-11 12:01:20
3: 6183 1 2016-07-11 12:01:40 2016-07-11 12:03:26
4: 6183 1 2016-07-11 12:04:20 2016-07-11 12:04:40
5: 6183 1 2016-07-11 12:04:55 2016-07-11 12:04:57
6: 6183 1 2016-07-11 12:05:40 2016-07-11 12:05:51
ので、table_A内の任意の行は、時間がSTART_TIMEとの間に入る場所: Merge pandas dataframes where one value is between two others
次のコードでは、Rで自分の所望の出力を提供します。
この質問は、私が求めていますと非常によく似ていますend_timeはtable_Bの対応する行と結合され、以下のような出力が得られます。私はPythonでさまざまなことを試しましたが、解決策はまだ見つかりませんでした。
例データから明白でないかもしれない1つの事は、同じstart_time
とend_time
の範囲内でtime
に複数のxとy値が発生することです。
> head(joined)
y x start_time end_time time
1 1 4077 2016-07-11 12:00:45 2016-07-11 12:00:56 2016-07-11 12:00:46
2 1 4077 2016-07-11 12:00:45 2016-07-11 12:00:56 2016-07-11 12:00:46
3 1 4077 2016-07-11 12:00:45 2016-07-11 12:00:56 2016-07-11 12:00:46
4 1 4077 2016-07-11 12:00:45 2016-07-11 12:00:56 2016-07-11 12:00:46
5 1 4077 2016-07-11 12:00:45 2016-07-11 12:00:56 2016-07-11 12:00:46
6 1 4077 2016-07-11 12:00:45 2016-07-11 12:00:56 2016-07-11 12:00:55
:中
または読み取り後:あなたは読まファイル中に型を変換することができます。おそらくasofまたは結合された結合がうまくいくかもしれないと思ったが運がない。私は基本的な方法ではないかもしれない私の試みの一つを修正しようとせずにいくつかのアイデアを得ることを望んでいた。 – Jeff
'table_A'、' table_B'、および 'joined'のサンプルを提供できますか?(あなたが' A'と 'B'のために提供したサンプルを仮定して)見えますか?それを使って、私はあなたを助けることができます...他の誰かが私にそれを打つことがない場合 – piRSquared
これを模倣する簡単な方法は['numpy.searchsorted'](https://docs.scipy.org/doc /numpy/reference/generated/numpy.searchsorted.html)、 'time'データを' start_time'と 'end_time'の配列にソートします。あなたのデータの構造に応じて、 'start_time'は使用する必要さえないかもしれません。 –