2016-10-12 5 views
2

Ich muss alle Elemente in einer Spalte des Pandas-Datenrahmens um den ersten Wert subtrahieren.Subtrahiere eine Spalte im Pandas-Dataframe mit dem ersten Wert

In diesem Code beschwert sich Pandas über selb.Interfered_Type, die ich denke, ist die Zirkelreferenzierung.

df.Time = df.Time - df.Time[0] 

Und in diesem Code beschweren sich Pandas über das Setzen von Wert auf Kopien.

df.Time = df.Time - df.iat[0,0] 

Was ist der richtige Weg, um diese Berechnung in Pandas zu machen?

Antwort

2

Ich glaube, Sie erste Element in Spalte Time von iloc wählen:

df.Time = df.Time - df.Time.iloc[0] 

Probe:

start = pd.to_datetime('2015-02-24 10:00') 
rng = pd.date_range(start, periods=5) 

df = pd.DataFrame({'Time': rng, 'a': range(5)}) 
print (df) 
       Time a 
0 2015-02-24 10:00:00 0 
1 2015-02-25 10:00:00 1 
2 2015-02-26 10:00:00 2 
3 2015-02-27 10:00:00 3 
4 2015-02-28 10:00:00 4 

df.Time = df.Time - df.Time.iloc[0] 
print (df) 
    Time a 
0 0 days 0 
1 1 days 1 
2 2 days 2 
3 3 days 3 
4 4 days 4 

Hinweis:

Für mich funktioniert auch Ihre perfekt 2 Möglichkeiten.

+0

Großartig! Für mich ist es wirklich seltsam, dass die Warnung, Wert auf Kopie einzustellen, nur einmal erscheint. Ist df.Time eine Kopie oder Referenz auf den originalen Datenrahmen? –

+0

Ich denke Verweis, weil kann keine neue Spalte auf diese Weise erstellen - 'df.newcol = df.Time - df.Time.iloc [0]' – jezrael

+0

Und über die Warnung - manchmal passiert es. Was ist deine Version von Pandas? – jezrael

Verwandte Themen