Вычисление диапазона значений в Pandas DataFrame с помощью функции groupby - PullRequest
0 голосов
/ 06 августа 2020

У меня есть набор данных с функцией abdomcir c, который имеет несколько значений для каждого ChildID, например:

    ChildID     abdomcirc
0   1           273
1   1           267
2   1           294
3   2           136
4   2           248

Я хочу вычислить диапазон значений для данного списка abdomcir c значений для каждого дочернего идентификатора. Итак, я хочу получить следующие результаты:

    ChildID     range
0   1           27
1   2           112

Итак, я сначала попробовал это:

df["range"] = df.groupby('ChildID')["mussabdomcirc"].transform('range')

Но я получил эту ошибку ValueError: 'range' не является допустимой функцией имя для преобразования (имя)

Итак, как было предложено в ответе на этот вопрос , я попробовал следующую строку:

df["range"] = df.groupby('ChildID').apply(lambda x: x.High.max() - x.Low.min())

Но я получил эта ошибка: AttributeError: объект 'DataFrame' не имеет атрибута 'High'

Не уверен, почему я получаю эту ошибку. Любые предложения о том, как успешно вычислить диапазон группы значений в кадре данных?

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Есть одна функция из numpy.ptp

s=df.groupby('ChildID')['abdomcirc'].apply(np.ptp).to_frame('range').reset_index()
Out[75]: 
   ChildID  range
0        1     27
1        2    112

Исправьте код

df.groupby('ChildID').apply(lambda x: x.abdomcirc.max() - x.abdomcirc.min())
1 голос
/ 06 августа 2020

High отсутствует в df, замените High на свой столбец

df.groupby("ChildID").apply(lambda x: x['abdomcirc'].max() - x['abdomcirc'].min())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...