2016-12-14 118 views
3

我有兩個數據幀,我試圖合併。在浮點值列上合併pandas DataFrame

數據框答:

col1 col2 sub grade 
0 1  34.32 x  a 
1 1  34.32 x  b 
2 1  34.33 y  c 
3 2  10.14 z  b 
4 3  33.01 z  a 

數據幀B:

col1 col2 group ID 
0 1  34.32 t  z 
1 1  54.32 s  w 
2 1  34.33 r  z 
3 2  10.14 q  z 
4 3  33.01 q  e 

我想col1和col2上合併。我一直pd.merge用的語法如下:

pd.merge(A, B, how = 'outer', on = ['col1', 'col2']) 

不過,我覺得我遇到了加盟COL2上的浮點值的問題,因爲許多行被丟棄。有沒有辦法使用np.isclose來匹配col2的值?當我在任何數據幀中引用col2的特定值的索引時,該值的數字小數多於數據幀中顯示的數字。

我想結果是:

col1 col2 sub grade group ID 
0 1  34.32 x  a  t  z 
1 1  34.32 x  b  s  w 
2 1  54.32 s  w  NaN  NaN 
3 1  34.33 y  c  r  z 
4 2  10.14 z  b  q  z 
5 3  33.01 z  a  q  e 
+0

顯示應如何看待預期結果 – RomanPerekhrest

+0

我已編輯帖子以反映所需的輸出。 – Megan

+0

@Megan在你的連接中你刪除了一些行。檢查我的答案如何基於兩列進行合併。合併後,您可以應用其他邏輯。 – MYGz

回答

3

您可以使用一個小巧的黑客工具 - 通過一些常量像1001000 ...,將列由多個浮動列intmerge和最後的鴻溝常量:

N = 100 
#thank you koalo for comment 
A.col2 = np.round(A.col2*N).astype(int) 
B.col2 = np.round(B.col2*N).astype(int) 
df = pd.merge(A, B, how = 'outer', on = ['col1', 'col2']) 
df.col2 = df.col2/N 
print (df) 
    col1 col2 sub grade group ID 
0  1 34.32 x  a  t z 
1  1 34.32 x  b  t z 
2  1 34.33 y  c  r z 
3  2 10.14 z  b  q z 
4  3 33.01 z  a  q e 
5  1 54.32 NaN NaN  s w 
+0

哦。加入小數點不準確? – MYGz

+0

是的,這是可能的,但我認爲這是低效的看到這[評論](http://stackoverflow.com/questions/38114654/pandas-read-csv-column-dtype-is-set-to-decimal-but轉換爲字符串/ 38114744#comment63666221_38114744) – jezrael

+0

好的方法,但由於舍入錯誤導致更細微的錯誤。更好地使用A.col2 = np.round(A.col2 * N).astype(int) – koalo

相關問題