2016-12-21 3 views
0

Also ich versuche, eine Funktion zum Index Zeile für Zeile gelten, aber einige ProblemePython Pandas auf Indexzeile mit Lambda-Zeile

startDate = '2015-05-01 00:00' 
endDate = '2015-05-08 00:00' 
idx = pd.date_range(startDate, endDate, freq="1min") 
df = pd.DataFrame(columns=['F(t)']) 
df = df.reindex(idx, fill_value=0) 

def circadian_function(T): 
    return math.cos(math.pi*(T-delta)/12) 

Alles ist in Ordnung bis zu hier habe, aber versuchen, die Funktion anwenden Ich bin mir nicht sicher, was ich tun soll

df['F(t)'] = df.index.apply(lambda x: circadian_function x[index].hour, axis=1) 

Sollte ich ein Lambda verwenden? Oder nur eine Bewerbung?

Antwort

2

Ich habe nicht 50 rep so kann ich nicht kommentieren @Ted Petrou Antwort; -; Ich wollte nur ein paar Dinge sagen, die Sie wissen sollten.

  1. Wenn Sie vorhaben, df.index.hour in Ihre carcadian_function zu füttern, stellen Sie sicher, dass Sie numpy statt math verwenden. Andernfalls wird der Interpreter eine TypeError werfen (ich habe gerade darüber erfahren).

  2. Stellen Sie sicher, dass delta definiert ist.

Beispiel:

import numpy as np 

def circadian_function(T, delta): 
    return np.cos(np.pi * (T-delta)/12) 

Was @Ted Petrou Sie in vollem Umfang zu tun empfiehlt:

df['F(x)'] = circadian_function(df.index.hour, 0.5) #I picked an arbitrary delta 

Numpy wird die Funktion automatisch für Sie vektorisieren. Requisiten für Ted Ich habe auch etwas Neues gelernt:>

+0

vergessen Sie das Delta, ich definiere delta = 18 im Code, aber df ['F (x)'] = circadian_function (df.index.hour) gibt den Fehler TypeError: nur Länge-1-Arrays kann in Python-Skalare konvertiert werden –

+0

Das ist genau der Grund, warum Sie in meinem Beispiel 'math' in' numpy' oder 'np' ändern sollten. – spicypumpkin

+1

Guter Fang mit numpy. Ich habe meine Antwort aktualisiert. –

1

Verwendung gilt nur als letztes Ergebnis. Dies kann leicht vektorisiert werden. Stellen Sie sicher, dass Sie Delta definieren.

import numpy as np 
df['F(t)'] = np.cos(np.pi*(idx.hour-delta)/12) 
+1

^^ ja! Dies! ^^ – piRSquared

+0

was meinst du? df ['F (t)'] = df.apply (math.cos (math.pi * (idx.hour-delta)/12)) funktioniert nicht (selbst nach der Definition von Delta) –

+0

und dies funktioniert auch nicht df ['F (t)'] = df ['F (t)']. anwenden (math.cos (math.pi * (df.index.hour-delta)/12)) –