#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 в результате (из-за несогласованных индексов столбцов).