С учетом Pandas кадра данных я оцениваю несколько переменных с помощью выражений groupby, применяя пользовательскую функцию. Работает нормально (на данный момент игнорируя второй 0-index-столбец), но я также хотел бы применить функцию к полному DataFrame.
xxx = pd.DataFrame([['A',1],['A',2],['B',3]],columns=(['cls','val']))
xxx
cls val
0 A 1
1 A 2
2 B 3
def myagg(dat):
vmax=dat.val.max()
vmean=dat.val.mean()
return pd.DataFrame([[vmax,vmean]],columns=(['MaxV','MeanV']))
xxx.groupby('cls').apply(myagg)
возвращает
MaxV MeanV
cls
A 0 2 1.5
B 0 3 3.0
Но xxx.apply (myagg) throws:
AttributeError: («Объект« Series »не имеет атрибута« val »», «произошел в индексах cls»)
I Я могу создать постоянную фиктивную переменную и сгруппировать ее, чтобы получить результат, который я получу sh - но наверняка найдутся более простые способы сделать это. Почему pandas думает о кадре без группировки как о серии, если тип (xxx) возвращает pandas .core.frame.DataFrame? Я на pandas 0.23.4; python 3,6.
xxx['dummy']='test'
xxx.groupby('dummy').apply(myagg)
MaxV MeanV
dummy
test 0 3 2.0