Pandas применяется к групповым кадрам и к полному кадру данных - PullRequest
0 голосов
/ 08 января 2020

С учетом 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

1 Ответ

0 голосов
/ 10 января 2020

Кажется, что использование фиктивной функции помогает.

def dummy(dat):
    return 1

xxx.groupby(dummy).apply(myagg)

, и результат такой же, как в вопросе. Нет необходимости изменять фрейм данных.

...