【发布时间】:2017-03-18 22:48:17
【问题描述】:
我有一个非常大的列表 (~2GB),记录了不同地点之间的旅行时间。在每个位置之间列出了多个值,其中一些重复如下:
Raw_Travel_Times=[('AB',2),('BC',5),('AB',8),('BC',10),('BC',7)]
我正在尝试有效地计算每个位置之间的平均旅行时间,例如:
Ave_Travel_Times=[('AB',5),('BC',11)]
我认为使用Counter 是可行的方法,但我想出的最佳解决方案太慢了:
# count how many times each Origin-Destination pair occurs
Trips=dict(Counter(Travel_Times))
{'AB':2,'BC':3}
# total travel time for each Origin-Destination pair
CTime=Counter(AB)
for t in Raw_Travel_Times:
CTime=CTime+Counter({t[0]:t[1]})
for c in CTime:
Link=c
Total_Time=CTime[c]
Num_Trips=Trips[c]
Avetime=TotalTime/Num_Trips
Ave_Travel_Times.append(Link,Avetime)
必须有一种更有效的方法来做到这一点,但我显然无法看到它。对此的任何帮助将不胜感激。
【问题讨论】:
-
对于像您这样的庞大且同质的数据,可能值得切换到 numpy。您可能会看到巨大的性能改进,具体取决于您对数据的处理方式。
-
@AndrasDeak 我建议
pandas更适合这项任务。 -
@Denziloe 同意,我第一次回复时没有通读。
标签: python performance python-3.x counter