Как создать цикл для функции? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть функция, которая сортирует набор данных по датам начала и окончания и возвращает верхнее значение.Я надеялся создать цикл for, который позволил бы мне запускать функцию для всех пятилетних диапазонов за один раз.

def get_topName(dataset, start_year, end_year):
    subset = dataset[(dataset.year >= start_year) & (dataset.year <= end_year)
    subset2 = subset.sort_values("n" , ascending = False)
return subset3[0:1]

Я надеялся зациклить эту функцию для следующих диапазонов: 1950-1960, 1960-1970, 1970-1980, 1980-1990 и 1990-2000.

Я пытался что-то подобное, но я не мог заставить его работать.Я также не уверен, как правильно создать свой список диапазонов дат.

for int in decades:
    get_topName(baby_df, start_year, end_year)

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Вот одно предложение, используя np.vectorize():

import numpy as np

new_func = np.vectorize(get_topName)
output = new_func(dataset, [list_of_start_years], [list_of_end_years])

Примечание из документации ,

Функция векторизации предоставляется в первую очередь для удобства, а не для производительности. Реализация по сути является циклом for.

0 голосов
/ 16 ноября 2018

Так как ваша функция имеет несколько аргументов, вы можете либо распаковать и использовать метод карты, либо использовать списки.В качестве альтернативы вы можете использовать метод itertools.partial и использовать карту поверх него.Самым простым в этом случае является понимание списка.Вот пример:

years    = range(1950, 2000, 10)
topNames = [get_topName(dataset, start, end) for start, stop in zip(years[:-1], years[1:])]
0 голосов
/ 16 ноября 2018

Вы можете сделать что-то вроде этого:

start_year = 1950
end_year = 2000
step = 10

for x in range(start_year, end_year, step):
    get_topName(baby_df, x, x+step)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...