Моей целью было выполнить простой groupby
, а затем сохранить средние значения группы в виде нового столбца, используя .transform('mean')
. Потом все усложнилось. Загвоздка в том, что мне действительно нужно среднее значение n-1 значений, где n — количество строк, принадлежащих каждой группе. Пример данных, где столбец RESULT является моим желаемым результатом:
import pandas as pd
list_of_tuples = [('A', 3, 4.5),
('A', 2, 4.75),
('A', 5, 4),
('A', 4, 4.25),
('A', 7, 3.5),
('B', 6, 6.75),
('B', 9, 6),
('B', 8, 6.25),
('B', 4, 7.25),
('B', 6, 6.75)]
df = pd.DataFrame.from_records(data=list_of_tuples, columns=['ID', 'VALUE', 'RESULT'])
>>> df
ID VALUE RESULT
0 A 3 4.50
1 A 2 4.75
2 A 5 4.00
3 A 4 4.25
4 A 7 3.50
5 B 6 6.75
6 B 9 6.00
7 B 8 6.25
8 B 4 7.25
9 B 6 6.75
Вы можете видеть, что в первой строке значение RESULT является средним значением [2, 5, 4, 7], что равно 4,5. Аналогично, значение RESULT для последней строки является средним значением [6, 9, 8, 4], что равно 6,75.
Так что для каждого ряда значение Результат должен быть среднему групповой (группировка на <) ID ) в VALUE для этой конкретной строки.
@IanThompson - Нет. Значение RESULT, где index = 3, должно исключать VALUE для этой строки (т.е. 4). Значение результатов, где индекс = 7, должно исключать 8.