2017-07-23 2 views
2

Neu in Pandas Entwicklung. Wie kann ich einen DataFrame mit dem in einer zuvor gesehenen Spalte enthaltenen Wert weiterleiten?Python Pandas - Vorwärts füllen ganze Zeilen mit Wert einer vorherigen Spalte

Autarke Beispiel:

import pandas as pd 
import numpy as np 
O = [1, np.nan, 5, np.nan] 
H = [5, np.nan, 5, np.nan] 
L = [1, np.nan, 2, np.nan] 
C = [5, np.nan, 2, np.nan] 
timestamps = ["2017-07-23 03:13:00", "2017-07-23 03:14:00", "2017-07-23 03:15:00", "2017-07-23 03:16:00"] 
dict = {'Open': O, 'High': H, 'Low': L, 'Close': C} 
df = pd.DataFrame(index=timestamps, data=dict) 
ohlc = df[['Open', 'High', 'Low', 'Close']] 

Daraus ergibt sich folgende Datenrahmen:

print(ohlc) 
        Open High Low Close 
2017-07-23 03:13:00 1.0 5.0 1.0 5.0 
2017-07-23 03:14:00 NaN NaN NaN NaN 
2017-07-23 03:15:00 5.0 5.0 2.0 2.0 
2017-07-23 03:16:00 NaN NaN NaN NaN 

ich aus dem letzten Datenrahmen zu so etwas wie dies gehen wollen:

     Open High Low Close 
2017-07-23 03:13:00 1.0 5.0 1.0 5.0 
2017-07-23 03:14:00 5.0 5.0 5.0 5.0 
2017-07-23 03:15:00 5.0 5.0 2.0 2.0 
2017-07-23 03:16:00 2.0 2.0 2.0 2.0 

So dass der zuvor angezeigte Wert in "Schließen" vorwärts ganze Zeilen füllt, bis eine neue aufgefüllte Zeile angezeigt wird. Es ist einfach genug, Spalte ‚Schließen‘ zu füllen, wie so:

column2fill = 'Close' 
ohlc[column2fill] = ohlc[column2fill].ffill() 
print(ohlc) 
        Open High Low Close 
2017-07-23 03:13:00 1.0 5.0 1.0 5.0 
2017-07-23 03:14:00 NaN NaN NaN 5.0 
2017-07-23 03:15:00 5.0 5.0 2.0 2.0 
2017-07-23 03:16:00 NaN NaN NaN 2.0 

Aber ist es eine Möglichkeit, über die 03.14.00 und 03.16.00 Zeilen mit dem ‚Schließen‘ Wert dieser Zeilen zu füllen? Und gibt es eine Möglichkeit, dies in einem Schritt mit einer Vorwärtsfüllung zu tun, anstatt zuerst die Spalte "Schließen" zu füllen?

Antwort

0

Es scheint, Sie müssen assign mit ffill und dann bfill pro Reihe von axis=1, aber notwendige volle NaN s Reihen:

df = ohlc.assign(Close=ohlc['Close'].ffill()).bfill(axis=1) 
print (df) 
        Open High Low Close 
2017-07-23 03:13:00 1.0 5.0 1.0 5.0 
2017-07-23 03:14:00 5.0 5.0 5.0 5.0 
2017-07-23 03:15:00 5.0 5.0 2.0 2.0 
2017-07-23 03:16:00 2.0 2.0 2.0 2.0 

Was ist das gleiche wie:

ohlc['Close'] = ohlc['Close'].ffill() 
df = ohlc.bfill(axis=1) 
print (df) 
        Open High Low Close 
2017-07-23 03:13:00 1.0 5.0 1.0 5.0 
2017-07-23 03:14:00 5.0 5.0 5.0 5.0 
2017-07-23 03:15:00 5.0 5.0 2.0 2.0 
2017-07-23 03:16:00 2.0 2.0 2.0 2.0 
Verwandte Themen