2017-07-23 2 views
2

Nouveau pour le développement des pandas. Comment puis-je transmettre un DataFrame avec la valeur contenue dans une colonne précédemment vue?Pandas Python - Forward remplissant des lignes entières avec la valeur d'une colonne précédente

autonome exemple:

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']] 

On obtient ainsi la trame de données suivante:

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 

Je veux aller de cette dernière dataframe à quelque chose comme ceci:

     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 

Alors que la valeur précédemment vue dans l'avant 'Close' remplit des lignes entières jusqu'à ce qu'une nouvelle ligne remplie soit vue. Il est assez simple pour remplir la colonne « Fermer » comme ceci:

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 

Mais est-il un moyen de remplir à travers les lignes 03:14:00 et 03:16:00 avec la valeur « Fermer » de ces lignes? Et y a-t-il un moyen de le faire en une seule étape en utilisant un remplissage avant au lieu de remplir d'abord la colonne «Fermer»?

Répondre

0

Il vous semble besoin assign avec ffill puis bfill par ligne par axis=1, mais nécessaire lignes complètes de NaN:

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 

Qu'est-ce même que:

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