Wiederholen Sie ein Pandas-Dataframe durch einen beliebigen Faktor

Pandas-Resampling ist wirklich praktisch, wenn Ihre Indizes die Datumsindizierung verwenden, aber ich habe keine einfache Implementierung gefunden, um einen beliebigen Faktor zu wiederholen. ZB behandeln Sie einfach jeden Index als einen beliebigen Index und probieren Sie den Dataframe so aus, dass seine resultierende Länge 4X kürzer ist (und intelligenter ist als nur jeder 4. Datenpunkt).

Dies wäre für jeden nützlich, der mit Daten arbeitet, die auf einer viel kürzeren Zeitskala als datetimes arbeiten. Zum Beispiel möchte ich in meinem Fall einen Audio-Vektor von 44KHz bis 11KHz wiederholen. Im Moment muss ich scipys "dezimieren" -Funktion verwenden und dann wieder in ein Dataframe umwandeln (mit dataframe.apply funktionierte nicht, weil es die Länge des Dataframs ändert).

Wer hat irgendwelche Vorschläge, wie man das erreichen kann?

  • Filtern eines DataFrame basierend auf mehreren Spaltenkriterien
  • Seaborn Barplot - Werte anzeigen
  • Warum bekomme ich "python int zu groß, um in C lange" Fehler umzuwandeln, wenn ich matplotlibs DateFormatter zum Formatieren von Datumsangaben auf der x-Achse verwende?
  • Python pandas groupby () Ergebnis
  • Wie kann ich das Datumsformat bei der Verwendung von pandas.to_csv angeben?
  • Resampling eines Multi-Index DataFrame
  • One Solution collect form web for “Wiederholen Sie ein Pandas-Dataframe durch einen beliebigen Faktor”

    Sie können DatetimeIndex verwenden, um DatetimeIndex zu wiederholen (bis zu Nanosekundenpräzision, Vorbehalt: Ich glaube, das ist nur in der kommenden DatetimeIndex von 0.13 verfügbar). Ich habe erfolgreich Pandas verwendet, um elektrophysiologische Daten im 24KHz-Bereich wiederzugeben. Hier ist ein Beispiel:

     In [97]: index = date_range('1/1/2001 00:00:00', '1/1/2001 00:00:01', freq='22727N') In [98]: index Out[98]: <class 'pandas.tseries.index.DatetimeIndex'> [2001-01-01 00:00:00, ..., 2001-01-01 00:00:00.999988] Length: 44001, Freq: 22727N, Timezone: None In [99]: s = Series(randn(index.size), index=index) In [100]: s.head(10) Out[100]: 2001-01-01 00:00:00 -0.820 2001-01-01 00:00:00.000022 -1.141 2001-01-01 00:00:00.000045 1.577 2001-01-01 00:00:00.000068 -1.031 2001-01-01 00:00:00.000090 0.343 2001-01-01 00:00:00.000113 -0.424 2001-01-01 00:00:00.000136 -0.753 2001-01-01 00:00:00.000159 0.411 2001-01-01 00:00:00.000181 0.238 2001-01-01 00:00:00.000204 1.048 Freq: 22727N, dtype: float64 In [101]: s.resample(s.index.freq * 4, how='mean') Out[101]: 2001-01-01 00:00:00 -0.354 2001-01-01 00:00:00.000090 -0.106 2001-01-01 00:00:00.000181 0.245 2001-01-01 00:00:00.000272 0.568 2001-01-01 00:00:00.000363 0.047 2001-01-01 00:00:00.000454 -0.560 2001-01-01 00:00:00.000545 -0.485 2001-01-01 00:00:00.000636 -0.271 2001-01-01 00:00:00.000727 -0.457 2001-01-01 00:00:00.000818 0.078 2001-01-01 00:00:00.000909 0.394 2001-01-01 00:00:00.000999 0.185 2001-01-01 00:00:00.001090 -0.441 2001-01-01 00:00:00.001181 0.300 2001-01-01 00:00:00.001272 -0.521 ... 2001-01-01 00:00:00.998715 -0.045 2001-01-01 00:00:00.998806 -0.044 2001-01-01 00:00:00.998897 0.090 2001-01-01 00:00:00.998988 0.748 2001-01-01 00:00:00.999078 -0.179 2001-01-01 00:00:00.999169 0.451 2001-01-01 00:00:00.999260 -1.041 2001-01-01 00:00:00.999351 -0.476 2001-01-01 00:00:00.999442 -0.234 2001-01-01 00:00:00.999533 -0.719 2001-01-01 00:00:00.999624 -0.606 2001-01-01 00:00:00.999715 -0.032 2001-01-01 00:00:00.999806 -0.296 2001-01-01 00:00:00.999897 -0.044 2001-01-01 00:00:00.999988 -0.951 Freq: 90908N, Length: 11001 

    Sie können in einem anrufbaren, how , was würde Ihnen erlauben, "etwas intelligenteres". pandas defaults, um den Durchschnitt über den Zeitraum zu nehmen (in diesem Fall ist das der Durchschnitt über jedem Stück von 22727 Proben).

    Python ist die beste Programmiersprache der Welt.