Надеюсь, я правильно понял ваш вопрос. Смотрите мою попытку ниже. Сделано это долго, чтобы быть явным в моем подходе. Я мог бы легко ввести значение долготы 5,00 и нарезать его по индексу, но это затруднило бы ответить на часть 2 вашего вопроса. Если я что-то пропустил, дайте мне знать.
Данные
df=pd.read_clipboard()
df
Введите точку и рассчитайте разницу с долготой
fn=5.00
df['dif']=(df['longitude']-fn)
df
Найдите минимальное значение положительная разница в каждой группе
df1=df[df['dif'] > 0].groupby('group').min().reset_index().reindex()
Найдите минимальную отрицательную разницу в каждой группе
df2=df[df['dif'] < 0].groupby('group').max().reset_index().reindex()
Добавьте вторую группу, указанную выше, к первой в один раз. Это отвечает на ваш вопрос 1
df3=df1.append(df2, ignore_index=True).sort_values(['group','longitude'])
df3
Вопрос 2
Введите столбец с именем status
и добавьте шаблон, 3
для нижний сосед и 4
для верхнего соседа
df3['Status']=0
np.put(df3['Status'], np.arange(len(df3)), ['3','4'])
df3.drop(columns=['dif'], inplace=True)
df3
Переименуйте соседей в lon_lo
и lon_up
df3['Status']=np.where(df3['Status']==3,'lon_lo', (np.where(df3['Status']==4,'lon_up',df3['Status'] )))
Используя Поверните , разбейте информационный кадр на lon_lo
и широту и сделайте то же самое с lon_up
. Здесь рационально разбить latitude
с на две группы lo
и up
первый разрыв группы
df4=df3[df3['Status']=='lon_lo']
result=df4.pivot_table('longitude',['latitude','group'],'Status').reset_index().set_index('group')
второй разрыв группы
df4=df3[df3['Status']=='lon_up']
result1=df4.pivot_table('longitude',['latitude','group'],'Status').reset_index().set_index('group')
Объединение по индексу двух групп при переименовании latitude
s в lo
и up
final=result1.merge(result, left_index=True, right_index=True, suffixes=('_lo','_up'))
final
Вывод