У меня есть огромная база данных о миграционных перемещениях, и я написал несколько сценариев, чтобы получить от них полезную информацию, но это действительно очень медленно.Как вы увидите, я не профессиональный программист, и мне было интересно, как сделать сбор данных более эффективным.
Для начала исходная база данных CSV имеет следующую структуру:
1 строка = 1 человек
Age Sex City_start City_destination ...
человек 1
человек 2
.....
Конечная структура базы данных:
Balance_2004 Balance_2005 ....
City1
City2
....
Для расчета этого баланса по городам и годам, которые я создалфункция, которая фильтрует исходную базу данных, чтобы подсчитать, сколько строк имеет определенный город в city_destination (INs), сколько строк в city_start (OUTs), а затем простая сумма для расчета баланса как INs - OUTs:
# idb = initial database
# City1 = pre-existing in final database
def get_balance(city, df):
ins = idb.City_start[idb.City_start == City1].count()
outs = idb.City_destination[idb.City_destination == City1].count()
balance = ins - outs
return balance
Затем с помощью этой функции я использовал pandas apply для заполнения окончательной базы данных следующим образом:
# fdb = final database
fdb['Balance_2004'] = idb['City_start'].apply(get_balance, df=idb)
Это работает хорошо, конечный результат - это то, что мне нужно, и я использую в общей сложности 42 функции применения, чтобы получитьболее конкретные данные, такие как баланс по полу, по возрастным группам ... но чтобы дать представление о том, кактеперь я запустил скрипт (с 42 функциями) 45 минут назад и все еще выполняется.
Есть ли способ сделать это менее трудоемким способом?
Заранее спасибо