Я думаю, вы можете определить функцию, которая работает с подгруппой фрейма данных, где она группирует value
по id
, вычисляет среднее значение и возвращает все, разделенное на элемент управления:
def func(da):
da = da.groupby('id')['value'].mean()
return 100*da[da.index != "control"]/da['control']
Затем вы просто группируете data.frame по group
, применяете эту функцию и сбрасываете индекс:
import pandas as pd
import numpy as np
df = pd.DataFrame({"id":np.repeat(['01','02','03','control','04','05','06','control'],2),
"group":np.repeat([1,2],8),
"value":[5,6,35,40,90,95,50,60,35,36,15,10,20,25,30,40]})
df.groupby('group').apply(func).reset_index()
group id value
0 1 01 10.000000
1 1 02 68.181818
2 1 03 168.181818
3 2 04 101.428571
4 2 05 35.714286
5 2 06 64.285714