Как найти минимальное расстояние .. когда две точки принадлежат одному расстоянию - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть dataframe, как это:

A  B  
1 0.1 
1 0.2
1 0.3
2 0.2
2 0.5
2 0.3
3 0.8
3 0.6
3 0.1

Как найти минимальное значение, относящееся к каждой точке 1,2,3, и не должно быть конфликта, что означает, что точки 1 и 2 не должны принадлежать одной точке 0,3 ..

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Если я правильно понимаю, вы хотите сделать две вещи: - найти минимальное значение B для каждого отдельного A и - убедитесь, что они не сталкиваются. Вы не указали, что делать в случае столкновения, поэтому я предполагаю, что вы просто хотите узнать, есть ли такой.

Первое можно получить с помощью ответа Рарблэка (хотя вы должны использовать min, а не max в вашем случае). Во-вторых, вы можете использовать метод .nunique() - посмотреть, сколько существует уникальных B значений (должно совпадать с числом уникальных A valuse)

#setup dataframe
df = pd.DataFrame.from_dict({
    'A': [1,1,1,2,2,2,3,3,3],
    'B': [0.1,0.2,0.3,0.2,0.5,0.3,0.8,0.6,0.1]
})

# find minimum
x = df.groupby('A')['B'].min()

# assert that there are no collisions:
if not (x.nunique() == len(x)):
    print ("Conflicting values")
0 голосов
/ 08 апреля 2019

Вы можете использовать функции groupby и max.

df.groupby('A').B.max()
...