Überprüfen Sie, ob die Spalte "Nicht-Index" in Pandas sortiert ist

Gibt es eine Möglichkeit, zu testen, ob ein Dataframe nach einer bestimmten Spalte sortiert wird, die kein Index ist (dh gibt es ein Äquivalent zu is_monotonic () für Nicht-Index-Spalten), ohne eine Art immer wieder aufzurufen und ohne eine Spalte in eine zu konvertieren Index?

  • Lesen Sie .csv-Datei zum Pandas-Datenrahmen und identifizieren Sie Datenabschnitte aus Zeilenumbrüchen
  • Plot pandas Datenrahmen mit Jahr über Jahr Daten
  • Pandas Filterreihen
  • Effizientes Anwenden einer Funktion auf eine gruppierte Pandas DataFrame parallel
  • Wie man Histogramme aus Dataframes in Pandas ablegt
  • Finden Sie den Element-Index in der Pandas-Serie
  • 2 Solutions collect form web for “Überprüfen Sie, ob die Spalte "Nicht-Index" in Pandas sortiert ist”

    Es gibt eine Handvoll Funktionen in pd.algos die von Nutzen sein könnten. Sie sind alle undokumentierte Implementierungsdetails, so dass sie sich von Release zu Release ändern könnten:

     >>> pd.algos.is[TAB] pd.algos.is_lexsorted pd.algos.is_monotonic_float64 pd.algos.is_monotonic_object pd.algos.is_monotonic_bool pd.algos.is_monotonic_int32 pd.algos.is_monotonic_float32 pd.algos.is_monotonic_int64 

    Die is_monotonic_* -Funktionen nehmen ein Array des angegebenen dtype und ein "timelike" boolean, das für die meisten Anwendungsfälle False sollte. (Pandas setzt auf True für einen Fall, der als Ganzzahl dargestellte Zeiten enthält.) Der Rückgabewert ist ein Tupel, dessen erstes Element repräsentiert, ob das Array monoton nicht abnimmt und dessen zweites Element repräsentiert, ob das Array monoton nicht zunimmt. Andere Tupel-Elemente sind versionabhängig:

     >>> df = pd.DataFrame({"A": [1,2,2], "B": [2,3,1]}) >>> pd.algos.is_monotonic_int64(df.A.values, False)[0] True >>> pd.algos.is_monotonic_int64(df.B.values, False)[0] False 

    Alle diese Funktionen nehmen einen bestimmten Input dtype an, auch is_lexsorted , der annimmt, dass die Eingabe eine Liste von int64 Arrays ist. Füge es den falschen dtype, und es wird wirklich verwirrt:

     In [32]: pandas.algos.is_lexsorted([np.array([-2, -1], dtype=np.int64)]) Out[32]: True In [33]: pandas.algos.is_lexsorted([np.array([-2, -1], dtype=float)]) Out[33]: False In [34]: pandas.algos.is_lexsorted([np.array([-1, -2, 0], dtype=float)]) Out[34]: True 

    Ich bin nicht ganz sicher, warum die Serie noch nicht irgendeine Art von Kurzschlüssen is_sorted . Es könnte etwas geben, was es schwieriger macht, als es scheint.

    Sie können die numpy Methode verwenden:

     import numpy as np def is_df_sorted(df, colname): return (np.diff(df[colname]) > 0).all() 

    Ein direkterer Ansatz (wie du vorgeschlagen hast, aber du sagst, du willst es nicht ..) ist in einen Index umzuwandeln und die is_monotonic Eigenschaft zu verwenden:

     import pandas as pd def is_df_sorted(df, colname): return pd.Index(df[colname]).is_monotonic 
    Python ist die beste Programmiersprache der Welt.