Was ist das Äquivalent von "select max (Spalte) aus Tabelle" in pytables

Ich habe einen Tisch mit einer ganzen Anzahl von numerischen Werten in ihm, ich weiß, ich könnte die Spalte extrahieren und eine max () auf sie, aber es gibt wahrscheinlich einen Weg, dies zu tun mit der In-Kernel-Methode. Ich kann es aber nicht finden.

  • Python & SQL Server
  • Pyodbc - Wie man eine select-Anweisung mit einer Variablen für einen Parameter ausführt
  • Lesen und Schreiben der Zugangsdatenbank in Python
  • Django viele-to-may: wie bekomme Zeilen-ID in verwandter Tabelle
  • Wie benutzt man Pandas Write_Frame, um Ergebnisse in Oracle Database in cx_Oracle zu exportieren
  • Django: Wählen Sie Werte mit max Zeitstempeln oder verbinden Sie die gleiche Tabelle
  • Strukturierte Abfragesprache für JSON (in Python)
  • Wie lösche ich ein Bild mit django?
  • 3 Solutions collect form web for “Was ist das Äquivalent von "select max (Spalte) aus Tabelle" in pytables”

    In dem Test, den ich gemacht habe, können Sie über zweimal schnellere Ergebnisse mit der iterrows Methode anstelle von wo erreichen:

    In [117]: timeit max(row['timestamp'] for row in table.iterrows(stop=1000000)) 1 loops, best of 3: 1 s per loop In [118]: timeit max(row['timestamp'] for row in table.where('(timestamp<=Tf)')) 1 loops, best of 3: 2.21 s per loop In [120]: timeit max(frames.cols.timestamp[:1000000]) 1 loops, best of 3: 974 ms per loop In [121]: timeit np.max(frames.cols.timestamp[:1000000]) 1 loops, best of 3: 876 ms per loop 

    Beachten Sie, dass oben Tf der 1000000 Eintrag dieser Spalte ist (was ein Float64 ist).

    Da die Frage nicht nach einer Vergleichsprüfung fragt, kann der Test getestet werden … Beachten Sie, dass die in der Frage vorgeschlagene Methode (Laden der Daten als numpy Array) noch etwas schneller ist (obwohl der Unterschied weniger als 3% beträgt und Wird für größere Datensätze weiter kleiner, ich habe nicht über 10 ^ 7 Zeilen getestet). Beste Ergebnisse, die ich gefunden habe, wo die max numpy Funktion (siehe oben).

    Ich würde auch gerne von einer effizienteren Methode lernen!

    Der schnellste Weg, den ich gefunden habe, ist dies durch die Indizierung Ihrer Tabelle auf die Cols, die Sie interessiert sind:

     table.cols.timestamp.createCSIndex() 

    Einmal indiziert, immer ein max ist fast sofort:

     max_timestamp = table.cols.timestamp[table.colindexes['timestamp'][-1]] 

    Dies wird zuerst der letzte (entsprechend dem größten Zeitstempel) Zeilenindex aus dem table.colindexes['timestamp'][-1] Ihrer Tabelle für die Zeitstempelspalte ( table.colindexes['timestamp'][-1] ) erhalten, und dann wird es gerade die Zeile holen table.cols.timestamp durch Indizierung in die entsprechende Spaltenreferenz ( table.cols.timestamp ).

    Von High Performance Data Management mit PyTables & Family (pdf):

     e = sum(row['col1'] for row in table.where(3<table.cols.col2<=20)) 

    Ändern Sie diese, um max() :

     e = max(row['col1'] for row in table.where(3<table.cols.col2<=20)) 
    Python ist die beste Programmiersprache der Welt.