#python #pandas
#python #pandas
Вопрос:
Например, у меня есть определенный фрейм данных pandas
A.1 A.2 A.3 A.4 B.1 B.2 B.3
0 1 5 8 10 ...
1 2 4 6 7 ...
2 3 3 6 1 ...
Я хочу вычислить средний столбец фрейма данных pandas по строкам только для столбцов, содержащих ‘A’, например :
A.avg
6
4.75
3.25
а затем найдите, какой из столбцов ‘A’ является ближайшим (наименьшая среднеквадратичная ошибка) к среднему значению и получите его имя столбца (здесь это будет A.2)
Первая часть довольно проста, но я больше всего борюсь со второй частью
Редактировать: это то, что я делаю, чтобы найти максимальный идентификатор столбца (у меня есть список подстрок (таких как A, B, C и т. Д.), И я выполняю развертку по фрейму данных):
max_id_per_substring = [
self.table[[column for column in list(self.table) if substring in column]].idxmax(axis=1).iloc[-1] for substring in self.all_substrings]
Комментарии:
1. Можете ли вы включить код для первой части, который «довольно прост»?
2. я привел пример, в котором я делаю то же самое, чтобы найти максимальный идентификатор столбца (у меня есть список подстрок, и я выполняю развертку по фрейму данных):
max_id_per_substring = [ self.table[[column for column in list(self.table) if substring in column]].idxmax(axis=1).iloc[-1] for substring in self.all_substrings]
3. Вопрос отредактирован, чтобы прояснить его подробнее
Ответ №1:
Удобнее всего выполнять вычисления в numpy, где вы можете использовать широковещательную передачу. Итак, сначала мы берем все подобные столбцы A.
и преобразуем их в массив numpy. Чтобы использовать широковещательную передачу для вычитания среднего значения из транспонированных данных, возведите результаты в квадрат и найдите номер столбца с минимальной суммой.
import pandas as pd
df = pd.DataFrame({'A.1':[1,2,3], 'A.2':[5,4,3], 'A.3':[8,6,6], 'A.4':[10,7,1], 'B.1':[0,0,0]})
arr = df.filter(like='A.').to_numpy().T
col_number = ((arr - arr.mean(0))**2).sum(1).argmin()
print(df.filter(like='A.').columns[col_number])
#A.2