2016-10-14 6 views
1

Ich bin neu bei Python und dies ist mein erster Beitrag, also entschuldige ich mich für irgendwelche mehrdeutigen Formulierungen.Fügen Sie Zeilen in einen Pandas DataFrame ein, in denen Zeilen basierend auf vorherigen Zeilenwerten fehlen

Ich habe eine Tabelle mit Spalte A, die für mehrere Iterationen von 1 bis 5 erhöht. Ich möchte Spalte A scannen und wo dieses Muster nicht passt, füge die richtige Zahl für A ein, kopiere Spalte C und hinterlasse einen fehlenden Wert für Spalte B.

Nur eine Zeile mit fehlenden Werten an der richtigen Stelle einfügen Wäre hilfreich.

Example

Antwort

2

Sie können reindex von MultiIndex.from_product und füllen dann Werte in Spalte fehlt C von ffill:

df['G'] = (df.A.diff().fillna(-1) < 1).cumsum() 
df.set_index(['G','A'], inplace=True) 
print (df) 
     B C 
G A   
1 1 1 Feb 
    2 8 Feb 
    4 64 Feb 
    5 125 Feb 
2 1 0 Feb 
    3 6 Feb 
    4 16 Feb 
    5 31 Feb 
3 1 -3 Feb 
    3 4 Feb 
    4 18 Feb 
    5 29 Feb 
mux = pd.MultiIndex.from_product([df.index.get_level_values('G').unique(), 
            np.arange(1,6)], names=('G','A')) 

df = df.reindex(mux) 
df.C = df.C.ffill() 

df = df.reset_index(level=0, drop=True).reset_index() 
print (df) 
    A  B C 
0 1 1.0 Feb 
1 2 8.0 Feb 
2 3 NaN Feb 
3 4 64.0 Feb 
4 5 125.0 Feb 
5 1 0.0 Feb 
6 2 NaN Feb 
7 3 6.0 Feb 
8 4 16.0 Feb 
9 5 31.0 Feb 
10 1 -3.0 Feb 
11 2 NaN Feb 
12 3 4.0 Feb 
13 4 18.0 Feb 
14 5 29.0 Feb 
+0

sehr cool Lösung. – Dickster

+0

@Dickster - Danke :) – jezrael

Verwandte Themen