Как объединить пары элементов строки в новый столбец в кадре данных pandas? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть этот DataFrame, где столбцы являются координатами (например, x1, y1, x2, y2 ...).Столбцы координат начинаются с восьмого столбца (предыдущие не имеют значения для вопроса)
У меня есть пример большего размера здесь , но вот пример:

start_column = 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(7):
    df.insert(0,'c'+str(7-i),'x')
df

Iхочу создать новый столбец в DataFrame в виде списка пар xy, например: df["coordinates"]=[[x1,y1],[x2,y2],[x3,y3]....]

Что я пробовал до сих пор:

for row in df.iterrows():
   for i in range(1,total_count_of_xy_rows):
      df["coordinates"]= 
             df[["x{}".format(i),"y{}".format(i)]].values.tolist()
   print(df)

Есть ли лучший способсделать это?

1 Ответ

1 голос
/ 25 сентября 2019

Создать новый столбец можно с помощью .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)]

Это касается неравного количества координат в каждой строке.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...