Использование нескольких лямбда-функций с пандой - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть кадр данных pd, в котором столбец с именем «process_id» для нескольких временных шагов имеет различные параметры, связанные с ним.Я хочу извлечь из них несколько сведений и поместить их в новый фрейм данных (поэтому мне не нужно использовать все детали данных).Ниже приведен пример того, что я имею в виду, где я храню для каждого «process_id» минимальное, максимальное, среднее и стандартное значение каждого параметра, а также определяю лямбда-функцию для сохранения среднего значения параметров за последние 5 шагов:

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean()])

Это работает нормально, и лямбда-функция меняет имя параметра в таблице на что-то вроде этого: "parameter_lambda" (не знаю как, но это работает).Теперь проблема в том, что если я хочу добавить другую лямбда-функцию, что-то вроде этого (или любое другое лямбда-определение):

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean(),lambda x: x.iloc[0:int(len(df)/5)].mean()])

Я получаю эту ошибку:

Имена функцийдолжно быть уникальным, найдено несколько имен с именем

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

Я пробовал что-то вроде этого:

df.groupby('dummy').agg({'returns':{'Mean': np.mean, 'Sum': np.sum}})

как описано здесь , но я получаю эту ошибку:

Ошибка спецификации: не могувыполнить переименование возвратов с помощью вложенного словаря

Может кто-нибудь мне помочь?Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019
Функция

lambda будет иметь проблему с ошибками повторяющихся имен, если lambda

fuc1=lambda x: x.tail(5).mean()
fuc1.__name__ = 'tail_mean'

fuc2=lambda x: x.iloc[0:int(len(df)/5)].mean()
fuc2.__name__ = 'len_mean'

features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', fuc1,fuc2])
создано более одного параметра
0 голосов
/ 10 февраля 2019
features = df.groupby('process_id').agg(['min', 'max', 'mean', 'std', lambda x: x.tail(5).mean(),lambda y: y.iloc[0:int(len(df)/5)].mean()])

Попробуйте с x и y вместо x и x

df.groupby('dummy').agg({'returns': [np.mean, np.sum]})

Также попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...