【发布时间】:2018-09-14 10:14:01
【问题描述】:
我有一个庞大的迁徙运动数据库,我编写了一些脚本来从中获取有用的信息,但它真的很慢。如您所见,我不是专业的编码员,我想知道如何使这种数据收集更有效。
首先,初始 CSV 数据库的结构如下:
1 行 = 1 人
Age Sex City_start City_destination ...第 1 个人
第二个人
.....
最终的数据库结构:
Balance_2004 Balance_2005 ....城市1
城市 2
....
为了计算每个城市和年份的余额,我创建了一个函数,该函数过滤初始数据库以计算 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 个应用函数来获取更具体的数据,例如按性别、按年龄组的平衡...但要了解这有多慢,我在 45 分钟前启动了脚本(有 42 个函数)并且仍在运行。
有什么方法可以减少耗时?
提前致谢
【问题讨论】:
-
我的或其他解决方案的效果如何?
标签: python pandas performance apply