Разделите элементы из столбцов с аналогичным префиксом

#python #pandas #dataframe #prefix #divide

Вопрос:

У меня есть следующий фрейм данных:

 df = pd.DataFrame(list(zip([1,2],  [5,6],  [9,10],  [13,14]))) df.columns =['x_A', 'y_A', 'x_B', 'y_B'] df:  x_A y_A x_B y_B  0 1 5 9 13  1 2 6 10 14  

Я хотел бы разделить столбцы с похожими префиксами, чтобы получить следующее:

 df:   x y  0 1/9 5/13  1 2/10 6/14  

Можно ли это сделать с помощью одной строки, если это возможно?

Спасибо.

Комментарии:

1. Всегда ли существует равное количество столбцов и всегда ли для вычисления требуется только 2 префикса (x, y) ?

2. Несколько префиксов (x,y,z,w,h…), но они всегда идут парами, как показано в приведенном выше примере.

Ответ №1:

Один подход:

 def divide_reduce(x):  y = x.to_numpy().astype(np.float64)  return np.divide.reduce(y, axis=1)  res = df.groupby(df.columns.str[0], axis=1).agg(divide_reduce) print(res)  

Выход

 x y 0 0.111111 0.384615 1 0.200000 0.428571  

Если вы предпочитаете однострочный подход, вы можете использовать:

 res = df.astype(np.float64).groupby(df.columns.str[0], axis=1).agg(np.divide.reduce, axis=1)  

Ответ №2:

Если префиксы всегда имеют формат *_A и *_B, вы можете использовать filter и деление для этого:

 df.filter(like='_A') / df.filter(like='_B').to_numpy()   x_A y_A 0 0.111111 0.384615 1 0.200000 0.428571  

Второму подкадру требуется .to_numpy() вызов для принудительного разделения и исключения NAN в результате (из-за несогласованных индексов столбцов).