Как создать свой собственный метод и использовать его в DataFrame? - PullRequest
2 голосов
/ 21 октября 2019

У меня есть DataFrame со столбцами: Город, Направление ветра, Температура. Конечно, каждый Город встречается только 1 раз !!! и имеет только 1 точку данных о направлении ветра и температуре. Например: 0 Нью-Йорк 252,0 22,0

Как создать собственный метон и использовать его в DataFrame? Например, я хотел бы создать свой собственный метод «aa», который возвращает какое-то решение (температура в городе минус средняя температура для всего столбца «Температура»), и использовать этот созданный метод во время агрегации моего DataFrame. В настоящее время я создал метод «aa», как вы можете видеть ниже, и я использую его в агрегации, тем не менее, метод «aa» везде показывает «0». Не могли бы вы написать мне соответствующий код? Я сделал ошибку id def aa (x)?

def aa(x):
    return x - np.mean(x)

file.groupby(["City"]).agg({"Wind direction":[np.mean, aa], "Temperature":["mean", aa]})

Пример данных: (взято из комментариев, предоставленных OP)

file = pd.DataFrame({"City":["New York", "Berlin", "London"], "Wind direction":[225.0, 252.0, 310.0], "Temperature":[21.0, 18.5, 22.0]})

1 Ответ

1 голос
/ 21 октября 2019

Вы получаете нули, потому что входные данные, которые получает aa, - это группа, а не полная серия, а среднее значение для одноэлементной группы - это единственный элемент.

Теперь это немного странноиспользовать groupby, когда вы знаете, что в каждой группе есть только один элемент, но вы можете заставить его использовать что-то вроде

def aa(x):
    return x - file[x.name].mean()

С вашим примером:

In [23]: file.groupby(["City"]).agg({"Wind direction":[np.mean, aa], "Temperature":["mean", aa]})
Out[23]:
         Wind direction            Temperature
                   mean         aa        mean   aa
City
Berlin            252.0 -10.333333        18.5 -2.0
London            310.0  47.666667        22.0  1.5
New York          225.0 -37.333333        21.0  0.5

Многопроще было бы просто напрямую работать с фреймом данных, например

In [26]: file['Wind direction aa'] = file['Wind direction'] - file['Wind direction'].mean()

In [27]: file['Temperature aa'] = file['Temperature'] - file['Temperature'].mean()

In [28]: file
Out[28]:
       City  Wind direction  Temperature  Wind direction aa  Temperature aa
0  New York           225.0         21.0         -37.333333             0.5
1    Berlin           252.0         18.5         -10.333333            -2.0
2    London           310.0         22.0          47.666667             1.5
...