2016-08-23 76 views
3

基本上,我在兩個不同的列中有經度和緯度(在網格上)。我得到了一個新座標集的雙元素列表(可能是numpy數組),我想在添加它之前檢查它是否是重複的。檢查一組值是否在熊貓中的一對列中

例如,我的數據:

df = pd.DataFrame([[4,8, 'wolf', 'Predator', 10], 
       [5,6,'cow', 'Prey', 10], 
       [8, 2, 'rabbit', 'Prey', 10], 
       [5, 3, 'rabbit', 'Prey', 10], 
       [3, 2, 'cow', 'Prey', 10], 
       [7, 5, 'rabbit', 'Prey', 10]], 
       columns = ['lat', 'long', 'name', 'kingdom', 'energy']) 

newcoords1 = [4,4] 
newcoords2 = [7,5] 

是否可以寫一個if語句來告訴我,是否已經存在與緯度和經度一行。在僞代碼:

if newcoords1 in df['lat', 'long']: 
    print('yes! ' + str(newcoords1)) 

(在這個例子中,newcoords1falsenewcoords2true

旁註:(newcoords1[0] in df['lat']) & (newcoords1[1] in df['long'])不起作用,因爲獨立檢查他們,但我需要知道這組合出現在單行

預先感謝您

回答

4

,你可以這樣來做:!

In [140]: df.query('@newcoords2[0] == lat and @newcoords2[1] == long') 
Out[140]: 
    lat long name kingdom energy 
5 7  5 rabbit Prey  10 

In [146]: df.query('@newcoords2[0] == lat and @newcoords2[1] == long').empty 
Out[146]: False 

下面一行將返回一個數字發現行:

In [147]: df.query('@newcoords2[0] == lat and @newcoords2[1] == long').shape[0] 
Out[147]: 1 

或使用NumPy的方法:

In [103]: df[(df[['lat','long']].values == newcoords2).all(axis=1)] 
Out[103]: 
    lat long name kingdom energy 
5 7  5 rabbit Prey  10 

這將顯示至少一個行是否已經發現:

In [113]: (df[['lat','long']].values == newcoords2).all(axis=1).any() 
Out[113]: True 

In [114]: (df[['lat','long']].values == newcoords1).all(axis=1).any() 
Out[114]: False 

說明:

In [104]: df[['lat','long']].values == newcoords2 
Out[104]: 
array([[False, False], 
     [False, False], 
     [False, False], 
     [False, False], 
     [False, False], 
     [ True, True]], dtype=bool) 

In [105]: (df[['lat','long']].values == newcoords2).all(axis=1) 
Out[105]: array([False, False, False, False, False, True], dtype=bool) 
2
x, y = newcoords1 

>>> df[(df.lat == x) & (df.long == y)].empty 
True # Coordinates are not in the dataframe, so you can add it. 

x, y = newcoords2 

>>> df[(df.lat == x) & (df.long == y)].empty 
False # Coordinates already exist. 
相關問題