Сначала я бы порекомендовал преобразовать ваши данные в длинный формат, чтобы вы могли естественным образом избавиться от пустых ячеек.Кроме того, большинство функций pandas работают лучше таким образом, потому что тогда вы можете использовать такие вещи, как группировка по операциям над всеми x или y или колеблющимися измерениями
from itertools import chain
import pandas as pd
## this part is only to have a running example
## here you would load your excel file
D = pd.DataFrame(
np.random.randn(10,6),
columns =chain(*[ [f"x{i}", f"y{i}"] for i in range(1,4)])
)
D["rowid"] = pd.np.arange(len(D))
D = D.melt(id_vars="rowid").dropna()
D["varIndex"] = D.variable.str[1]
D["variable"] = D.variable.str[0]
D = D.set_index(["varIndex","rowid","variable"])\
.unstack("variable")\
.droplevel(0, axis=1)
Таким образом, эти преобразования дадут вам таблицу, в которой у вас будет индекс какдля исходного идентификатора строки (может быть, это временной ряд или что-то еще), а также индекс переменной x 1 или x 2 и т. д.
Теперь вы можете выполнять свои расчеты, перезаписывая предыдущие столбцы
## Everything here is a constant
ratiox = (73.77481944859028 - 73.7709567323327) / 720
ratioy = (18.567453940477293 - 18.56167674097576) / 1184
mapLongitudeStart = 73.7709567323327
mapLatitudeStart = 18.567453940477293
# apply the calculations directly to the columns
D.x = (mapLongitudeStart + D.x * ratiox))
D.y = (mapLatitudeStart - (-D.y * ratioy ))