私が与えられた大きなcsvには、フライトデータの大きなテーブルがあります。解析を支援するために作成した関数は、フライトIDの列を反復処理し、すべての一意のフライトIDのインデックスと値を最初に出現した順に含む辞書を返します。
辞書={インデックス:FID、...}
これは、列内のFIDの繰り返し(数十万行後...)について心配する必要がなかった古い関数への迅速な調整として提供されます。
現在、各値を順番に繰り返し比較しています。値がその後の値と等しい場合、それはスキップされます。次の値が異なる場合は、その値がディクショナリに格納されます。私はそれを今までに変更し、その値が以前にすでに発生しているかどうかを確認し、発生している場合はスキップします。
これが私のコードです:
def DiscoverEarliestIndex(self, number):
finaldata = {}
columnvalues = self.column(number)
columnenum = {}
for a, b in enumerate(columnvalues):
columnenum[a] = b
i = 0
while i < (len(columnvalues) - 1):
next = columnenum[i+1]
if columnvalues[i] == next:
i += 1
else:
if next in finaldata.values():
i += 1
continue
else:
finaldata[i+1]= next
i += 1
else:
return finaldata
これは非常に非効率的で、辞書が大きくなるにつれて遅くなります。この列には520万行あるので、Pythonでこれだけ処理するのは明らかに良い考えではありませんが、今のところはこれに固執しています。
この関数を書くためのより効率的な方法はありますか?