Создать новый столбец можно с помощью .apply
, используя пользовательскую функцию понимания списка в разных строках:
start_column = 8
coordinates_list = list(zip(df.columns[(start_column-1):-1:2],df.columns[start_column::2]))
df['coordinates'] = df.apply(lambda row: [(row[x], row[y])
for x,y in coordinates_list if not any((pd.isna(row[x]), pd.isna(row[y])))], axis=1)
Используя этот пример ввода, столбцы координат начинаются с 8-го столбца, какВы указали в комментарии:
df = pd.DataFrame(columns = ['x1','y1','x2','y2'],
data = [(0,0,1,0),(0,1,2,3),(-1,-2,None,None)])
for i in range(start_column-1):
df.insert(0,'c'+str(start_column-1-i),'x')
df
c1 c2 c3 c4 c5 c6 c7 x1 y1 x2 y2
0 x x x x x x x 0 0 1.0 0.0
1 x x x x x x x 0 1 2.0 3.0
2 x x x x x x x -1 -2 NaN NaN
Это приведет к выводу:
c1 c2 c3 c4 c5 c6 c7 x1 y1 x2 y2 coordinates
0 x x x x x x x 0 0 1.0 0.0 [(0, 0), (1.0, 0.0)]
1 x x x x x x x 0 1 2.0 3.0 [(0, 1), (2.0, 3.0)]
2 x x x x x x x -1 -2 NaN NaN [(-1, -2)]
Это касается неравного количества координат в каждой строке.Надеюсь, это поможет!