2016-04-19 5 views
1

Wie die Frage erwähnt, habe ich einen Pandas (v. 0.18.0) Datenrahmen, der aus ein paar Spalten von 1D Daten besteht (simulierte optische Spektren).Wie kann ich den Index eines DataFrames verschieben, wenn ich Float64Index verwende?

Ein Beispieldatensatz sieht wie folgt aus:

Photon Energy (eV), Spin_Up (a.u.), Spin_Down (a.u.),  Difference 
1.520040,     0.000000,   0.00000,   0.000000 
1.520515,     0.000000,   0.00000,   0.000000 
1.520990,     0.000000,   0.00000,   0.000000 
1.521465,     9.742188,   0.00000,   9.742188 
1.521940,     35.432140,   24.41665,  11.015490 
1.522415,     69.708160,   99.48898,  -29.780820 
1.522890,    140.897400,   198.71710,  -57.819700 
1.523365,    369.593200,   401.61710,  -32.023900 
1.523840,    1688.481000,  1034.93300,  653.548000 
1.524315,    1822.535000,  4645.04600,  -2822.511000 
1.524790,    1284.102000,  5457.34800,  -4173.246000 

Die Daten werden direkt aus einer CSV importiert (pd.read_csv('sample.csv', index_col='Photon Energy (eV)') und die drei importierten Spalten sind ein Index Reihe (Photonenenergie mit sechs Dezimalgenauigkeit) und zwei Elektronen . Populationen (ganzzahlige Werte)

Nun würde ich mag die Index-Spalte von ~ 2.5meV (entsprechend 200 Zeilen) verschieben

ich den maximalen Punkt mit folgendem gezogen haben.

abs_max = df.loc[1.52:1.53,["Sum"]].idxmax() 
shift_idx = df.index.get_loc(abs_max[0]) 
shift_amt = int(shift_idx - spdf.index.get_loc(1.515005)) 

dann versucht, die Verschiebung mit df.shift(periods=shift_amt) (I die int() auf shift_amt nicht notwendig ist, nur versuchen, alle Grundlagen abzudecken erkennen) anzuwenden. Dies schien keinen Effekt zu haben (Indexspalte wurde nicht verschoben). Der Versuch, einen Wert auf freq innerhalb der shift() Funktion anzuwenden, machte keinen Unterschied. Als ich dasselbe mit df.index.shift() versuchte, erhielt ich einen Fehler NotImplementedError: Not supported for type Float64Index. Ich nehme an, dies bedeutet, dass das, was ich versuche zu tun, nicht möglich ist, und dass ich zurückgehen sollte, um eine einfache ganzzahlige Indexspalte zu verwenden. Aber bevor ich aufhöre, würde ich gerne wissen, ob es etwas gibt, das mir in diesem Prozess fehlt.

+0

[Dokumentation] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.shift.html) sagt Sie müssen 'int' für Perioden verwenden. – MaxU

+0

Sorry, habe vergessen, 'shift_amt' in meiner Frage zu definieren. Es ist eine Ganzzahl, also glaube ich nicht, dass das ein Problem ist. –

+0

Was meinst du damit, Index zu verschieben? Bist du nach 'df.index + = 0.5'? – MaxU

Antwort

1

Sie können Ihre Indexwerte wie folgt ändern:

df.index += x 
Verwandte Themen