В дальнейшем, male_trips - это большой кадр данных pandas, а станции - небольшой кадр данных pandas. Для каждого идентификатора станции я хотел бы узнать, сколько мужских поездок произошло. Следующее выполняет эту работу, но занимает много времени:
mc = [ sum( male_trips['start_station_id'] == id ) for id in stations['id'] ]
как я могу это сделать?
Update! Таким образом, существовали два основных подхода: groupby()
, затем size()
и более простой .value_counts()
. Я сделал быстрый timeit
, а подход groupby
выигрывает довольно большой запас! Вот код:
from timeit import Timer
setup = "import pandas; male_trips=pandas.load('maletrips')"
a = "male_trips.start_station_id.value_counts()"
b = "male_trips.groupby('start_station_id').size()"
Timer(a,setup).timeit(100)
Timer(b,setup).timeit(100)
и вот результат:
In [4]: Timer(a,setup).timeit(100) # <- this is value_counts
Out[4]: 9.709594964981079
In [5]: Timer(b,setup).timeit(100) # <- this is groupby / size
Out[5]: 1.5574288368225098
Обратите внимание, что на этой скорости для изучения ввода данных значение_значений происходит немного быстрее и менее запоминается!