2016-06-30 3 views
1

ich einen Datenrahmen erstellt zu verwenden, wenn die Prüfung der Resampling-Funktionen wie folgt:np.where Code - Valueerror: „können keine Optionen auf DatetimeIndexResampler gesetzt“

f = pd.DataFrame(data=np.linspace(50, 100, 200), index=pd.date_range(end='2014-06-18', periods=200), columns=['last']) 
f 
Out[63]: 
last 
2013-12-01 50.000000 
2013-12-02 50.251256 
2013-12-03 50.502513 

ich dann das Resampling wie folgt verwenden:

f_d1_resamp = f.resample('1w') 

ich wollte dann np.where verwenden, um eine neue Spalte zu erstellen, wenn bestimmte Kriterien erfüllt sind:

f_d1_resamp['Gap'] = np.where(f['last'] > f['last'].shift(),(f["last"].shift() - f["last"]),''); 

B Ich erhalte den folgenden Fehler:

ValueError: cannot set items on DatetimeIndexResampler 

Wie ändere ich meinen np.where-Code, um diesen Fehler zu stoppen? Ich muss np.where verwenden, da dies für meine anderen Projekte verwendet wird. Dank

Antwort

2

Sie einige aggragate Funktion hinzufügen müssen wie mean, sum, weil in Version 0.18.0 wurde APIResampler geändert und zurück - siehe resample api:

f_d1_resamp = f.resample('1w').sum() 

Dann können Sie numpy.where verwenden - ich besser denken genarally ist verwenden, um neue f_d1_resamp statt f, weil es nach oben oder unten Probenahme sein kann:

f_d1_resamp['Gap'] = np.where(f_d1_resamp['last'] > f_d1_resamp['last'].shift(), 
           f_d1_resamp["last"].diff(),''); 
print (f_d1_resamp) 
        last     Gap 
2013-12-01 50.000000      
2013-12-08 357.035176 307.035175879397 
2013-12-15 369.346734 12.311557788944754 
2013-12-22 381.658291 12.311557788944697 
2013-12-29 393.969849 12.311557788944697 
2014-01-05 406.281407 12.311557788944754 
2014-01-12 418.592965 12.311557788944697 
2014-01-19 430.904523 12.311557788944697 
2014-01-26 443.216080 12.31155778894481 
2014-02-02 455.527638 12.311557788944697 
2014-02-09 467.839196 12.31155778894464 
... 
... 
... 
+0

Dank das funktioniert. Als beantwortet markiert. – seemo

+0

Danke. Schöner Tag! – jezrael

+0

Ja, Sie können nur eine Antwort akzeptieren, aber Sie können beide aufwerten. – jezrael

1

Die erste Ausgabe ist, dass Ihr Resampling-Objekt nur ein Resampler ist, müssen Sie wie mean einige Aggregat-Funktion aufrufen, zweitens, selbst wenn, dass Ihre Linie zu befestigenden waren:

f_d1_resamp['Gap'] = np.where(f['last'] > f['last'].shift(),(f["last"].shift() - f["last"]),'') 

wirft ValueError:

ValueError: Length of values does not match length of index 

hierfür Sie where direkt auf dem gewünschten Ergebnis können eher np.where als verwenden:

In [305]: 
f_d1_resamp = f.resample('1w').mean() 
f_d1_resamp['Gap'] = f['last'].diff().where(f['last'] > f['last'].shift(),'') 
f_d1_resamp 

Out[305]: 
       last  Gap 
2013-12-01 50.000000   
2013-12-08 51.005025 0.251256 
2013-12-15 52.763819 0.251256 
2013-12-22 54.522613 0.251256 
2013-12-29 56.281407 0.251256 
2014-01-05 58.040201 0.251256 
2014-01-12 59.798995 0.251256 
2014-01-19 61.557789 0.251256 
2014-01-26 63.316583 0.251256 
2014-02-02 65.075377 0.251256 
2014-02-09 66.834171 0.251256 
2014-02-16 68.592965 0.251256 
2014-02-23 70.351759 0.251256 
2014-03-02 72.110553 0.251256 
2014-03-09 73.869347 0.251256 
2014-03-16 75.628141 0.251256 
2014-03-23 77.386935 0.251256 
2014-03-30 79.145729 0.251256 
2014-04-06 80.904523 0.251256 
2014-04-13 82.663317 0.251256 
2014-04-20 84.422111 0.251256 
2014-04-27 86.180905 0.251256 
2014-05-04 87.939698 0.251256 
2014-05-11 89.698492 0.251256 
2014-05-18 91.457286 0.251256 
2014-05-25 93.216080 0.251256 
2014-06-01 94.974874 0.251256 
2014-06-08 96.733668 0.251256 
2014-06-15 98.492462 0.251256 
2014-06-22 99.748744  NaN 
+0

Danke, ich habe versucht, dies auch als beantwortet zu markieren, aber kann ich nur eine Antwort auswählen? – seemo

Verwandte Themen