2

2 つの DataFrame を時間的に最も近い隣人によって正常にマージしました。私の現在の中間結果は次のようになります。

                     merge_key              jd  var2               index  distance  
2010-01-01 00:00:00          0  2455197.500000     0 2010-01-01 00:00:00      0
2010-01-01 00:06:00          0  2455197.500000     0 2010-01-01 00:00:00   -360
2010-01-01 00:12:00          0  2455197.500000     0 2010-01-01 00:00:00   -720
2010-01-01 00:18:00          1  2455197.517361     1 2010-01-01 00:25:00    420
2010-01-01 00:24:00          1  2455197.517361     1 2010-01-01 00:25:00     60
2010-01-01 00:30:00          1  2455197.517361     1 2010-01-01 00:25:00   -300
2010-01-01 00:36:00          1  2455197.517361     1 2010-01-01 00:25:00   -660
2010-01-01 00:42:00          2  2455197.534722     2 2010-01-01 00:50:00    480
2010-01-01 00:48:00          2  2455197.534722     2 2010-01-01 00:50:00    120
2010-01-01 00:54:00          2  2455197.534722     2 2010-01-01 00:50:00   -240

次のステップでは、重複したエントリを削除し、最小距離のエントリのみを選択したいと思います。私が思いついた:

df.groupby("merge_key").apply(lambda x: x.ix[np.abs(x['distance']).idxmin()])

ただし、これは次のことにつながります。

          merge_key       jd var2                index distance
merge_key                                                      
0                 0  2455198    0  2010-01-01 00:00:00        0
1                 1  2455198    1  2010-01-01 00:25:00       60
2                 2  2455198    2  2010-01-01 00:50:00      120

「jd」のデータ型が整数に変更されたようですか?また、merge_key を新しいインデックスとして使用したくありません。

私の望ましい出力は実際には次のとおりです。

                     merge_key              jd  var2               index  distance  
2010-01-01 00:00:00          0  2455197.500000     0 2010-01-01 00:00:00      0
2010-01-01 00:24:00          1  2455197.517361     1 2010-01-01 00:25:00     60
2010-01-01 00:48:00          2  2455197.534722     2 2010-01-01 00:50:00    120
4

1 に答える 1