Code: Alles auswählen
# =============================================================================
# Example
# =============================================================================
#example Data:
import pandas as pd
example_data = [{"id" : 325, "lat" : 52, "lon" : 14, "weitere Werte" : "XY"},
{"id" : 151, "lat" : 48, "lon" : 9, "weitere Werte" : "XY"},
{"id" : 197, "lat" : 45, "lon" : 11, "weitere Werte" : "XY"},
{"id" : 456, "lat" : 30, "lon" : 17, "weitere Werte" : "XY"},
{"id" : 325, "lat" : 52, "lon" : 14, "weitere Werte" : "XY"},
{"id" : 325, "lat" : 52, "lon" : 14, "weitere Werte" : "XY"},
{"id" : 151, "lat" : 48, "lon" : 9, "weitere Werte" : "XY"},
{"id" : 325, "lat" : 52, "lon" : 14, "weitere Werte" : "XY"},
{"id" : 197, "lat" : 45, "lon" : 11, "weitere Werte" : "XY"},
{"id" : 456, "lat" : 30, "lon" : 17, "weitere Werte" : "XY"},
{"id" : 325, "lat" : 52, "lon" : 14, "weitere Werte" : "XY"},
{"id" : 477, "lat" : 34, "lon" : 21, "weitere Werte" : "XY"}]
df1 = pd.DataFrame(example_data)
#df1
#Out[184]:
# id lat lon weitere Werte
#0 325 52 14 XY
#1 151 48 9 XY
#2 197 45 11 XY
#3 456 30 17 XY
#4 325 52 14 XY
#5 325 52 14 XY
#6 151 48 9 XY
#7 325 52 14 XY
#8 197 45 11 XY
#9 456 30 17 XY
#10 325 52 14 XY
#11 477 34 21 XY
#Example List: ist in wirklichkeit eine Liste von objekten, aber sollte als Beispiel
#keine Rolle spielen
example_list = [10, 30, 50, 70, 90]
#ich muss nun einen Wert Jeder Zeile Berechnen sagen wir mal ganz simple lat + lon
#zb erste Zeile 52 + 14 = 66
#Diesen Wert (66) möchte ich nun mit allen zahlen in der Liste Vergleichen und
#falls er größer ist benötige ich ihn
#im ersten fall ist 66 größer als jeder dieser Werte trifft also auf alle zu
#damit ich den datensatz schnell komprimmieren kann würde ich auch die isin()`-Methode
#verwenden und würde deshalb ein Dictionary erstellen und zu jeder Zahl in der Liste die Sensor_id
#hinzufügen
#für die Erste Zeile wäre also der Dictionary Eintrag wie folgt.
#dic = {10 : [325], 20 : [325], 30 : [325], 40 : [325], 50 : [325]}
#dic
#Out[186]: {10: [325], 20: [325], 30: [325], 40: [325], 50: [325]}
#im laufe der Itteration über die Zeilen werden die listen gefühlt.
dic = {}
help_list = []
for number in example_list:
for index, row in df1.iterrows():
if number < (row["lat"] + row["lon"]):
help_list.append(row["id"])
dic[number] = help_list
help_list = []
#dic
#Out[222]:
#{10: [325, 151, 197, 456, 325, 325, 151, 325, 197, 456, 325, 477],
# 30: [325, 151, 197, 456, 325, 325, 151, 325, 197, 456, 325, 477],
# 50: [325, 151, 197, 325, 325, 151, 325, 197, 325, 477],
# 70: [],
# 90: []}
#Nun da es statt 10,30,50,70,90 eine lange liste von obkekten ist und auch der id-Datensatz eine
#csv von 1Gb ist selbst mit einer kleinen Test csv von nur 20 Mb sind Tasusende von Zeilen enthalten
#und die laufzeit viel zu lange...
#die isin()Methode würde ich dann anschließend anwenden, denn wenn ich mal eine Liste der ids zum
#jeweilige Objekt habe sollte der Datensatz ziemlich schnell komprimierbar sein... trotzdem sehe ich noch
#keine Möglichkeit nicht alle Zeilen einzulesen.