2017-07-08 82 views
0

我有兩個熊貓數據框,我正在嘗試加入左側表格中最右側的表格與右側表格「MeasuredDepth」中左側表格「深度」相匹配的右側表格?Python Pandas Calc Column

例左表(主表)

index  Date_Time   Depth 
6659 4/25/2017 1:26  2073.02 
6660 4/25/2017 1:26  2073.287 
6661 4/25/2017 1:26  2073.916 
6662 4/25/2017 1:26  2074.64 
6663 4/25/2017 1:26  2075.335 
6664 4/25/2017 1:26  2076.044 

例右表(參考表)

index MeasuredDepth Inclination 
16  1844   1.42 
17  1939   1.69 
18  2034   1.43 
19  2128   1.39 
20  2223   1.12 
21  2317   1.22 
22  2412   1.1 
23  2600   0.56 
24  2695   1.97 

例子結果表

index DATETIME  Depth  Inclination 
6659 4/25/2017 1:26  2073.02   1.43 
6660 4/25/2017 1:26  2073.287   1.43 
6661 4/25/2017 1:26  2073.916   1.43 
... 
26704 5/3/2017 23:23  2625.316   0.56 
26705 5/3/2017 23:23  2626.143   0.56 
26706 5/3/2017 23:24  2627.08   0.56 
26707 5/3/2017 23:24  2628.056   0.56 

任何幫助,將不勝感激!

回答

0

讓我們使用pd.merge_asof

ref_df['MeasuredDepth'] = ref_df['MeasuredDepth'].astype(float) 

df_out = pd.merge_asof(main_df, ref_df, left_on='Depth',right_on='MeasuredDepth') 

輸出:

 index_x Date_Time  Depth index_y MeasuredDepth Inclination 
0 4/25/2017  1:26 2073.020  18   2034.0   1.43 
1 4/25/2017  1:26 2073.287  18   2034.0   1.43 
2 4/25/2017  1:26 2073.916  18   2034.0   1.43 
3 4/25/2017  1:26 2074.640  18   2034.0   1.43 
4 4/25/2017  1:26 2075.335  18   2034.0   1.43 
5 4/25/2017  1:26 2076.044  18   2034.0   1.43 
+0

看到上面的例子,看看是否有道理。謝謝 – CodeStack82

0

最好和最快的方法是按升序或降序對值進行排序。

leftTable = leftTable.sort_values('Depth') 
rightTable = rightTable.sort_values('Merge') 
#reindex the data 
leftTable = leftTable.reset_index(drop=True) 
rightTable = rightTable.reset_index(drop=True) 

現在開始合併索引作爲參數。

Table = leftTable.join(rightTable, how = "outer") 

另一種替代方法是採用迭代方法,這種方法不僅費時,而且可能會導致數據丟失。 如果這是左表的升序排序數據幀(爲便於修改數據)。

index Date_Time Depth 
6659 4/25/2017 1:26 20 
6660 4/25/2017 1:26 21 
6661 4/25/2017 1:26 23 
6662 4/25/2017 1:26 24 
6663 4/25/2017 1:26 27 
6664 4/25/2017 1:26 28 

如果這是爲右表的升序排列(變形爲便於數據)

index MeasuredDepth Inclination 
16 1844 12 
17 1939 20 
18 2034 21 
19 2128 23 
20 2223 24 
21 2317 27 

它們都是相等的尺寸。如果我們使用函數來測量兩個表中每行的深度值之間的差異,那麼清晰地看到右表中深度爲12的行不會被附加到任何地方,因爲標準集是「最小距離」

如果你在數據丟失的情況下,你可以嘗試遍歷每一行並找到最佳匹配。

+0

迭代方法可能會工作。連接後,結果表應具有相同的行數,但是傾斜度值最接近相應「深度」的新列「傾角」。 感謝您的協助。 – CodeStack82

+0

@ CodeStack82傾角如何最接近深度?你能詳細說明嗎? – Djokester

+0

查看上面的回覆和圖片。謝謝 – CodeStack82

0

例如,對於左表中的每個深度值我基本上要查找類似的深度範圍在右表返回該深度的最接近的傾角。

問題是'左表'中的'深度'值是時間序列數據,所以我基本上每5秒就會得到一行值。 「右表」「MeasuredDepth」列值僅記錄每95英尺。所以我只是試圖從右表獲得最接近的傾斜值,與左表中更隨機的「深度」值相匹配。

enter image description here

+0

對不起,令人困惑的迴應,還是堆棧溢出的新手 – CodeStack82