2017-09-10 4 views
0

Ich habe diesen Datenrahmen als Eingang:Pandas Datenrahmen: Reihe mehrfach durch vorherige Zeile

     df1  
       A  B  C 
20/08/17 0.0000% 0.0000% 0.0000% 
21/08/17 0.0000% 0.0000% 0.0000% 
22/08/17 1.0000% 1.0000% 1.0000% 
23/08/17 0.0000% 0.0000% 0.0000% 
24/08/17 1.9417% 0.9709% 0.9709% 
25/08/17 1.8692% 0.9346% 0.9346% 

Und ich versuche den folgenden Datenrahmen als Ausgabe zu erhalten:

     df2  
       A  B  C 
20/08/17 0.0000% 0.0000% 0.0000% 
21/08/17 0.0000% 0.0000% 0.0000% 
22/08/17 1.0000% 1.0000% 1.0000% 
23/08/17 1.0000% 1.0000% 1.0000% 
24/08/17 2.9806% 2.0097% 2.0097% 
25/08/17 4.9612% 3.0194% 3.0194% 

, wo der Wert

df2['A'][1]=df2['A'][0]*(1+df1.sum(axis=1))+df1['A'][1] 

Ich möchte diese Funktion auf den gesamten Datenrahmen anwenden.

Könnten Sie mir bitte dabei helfen?

+0

Ihre Formel ist in diesem Teil unklar: '... * (1 + df1.sum (Achse = 1)) + ...'. 'df1.sum (axis = 1)' ergibt eine Reihe (Summe jeder Zeile). Welche Zeile möchtest du genau hinzufügen? – FabienP

+0

Danke für Ihre Antwort! Ich werde versuchen, es besser zu erklären: df2 ['A'] ['21/08/17'] = df2 ['A'] ['20/08/17'] * (1 + df1 ['21/08/17 ']. Sum (Achse = 1)) + df1 [' A '] [' 21/08/17 '] Ich möchte diese Formel auf jede Zeile des Datenrahmens anwenden, ohne sie zu durchlaufen. – peps23

Antwort

0

Dies sollte wie erwartet funktionieren:

df2 = df.copy() 
for i in range(df3.index.size): 
    if not i: 
     continue 
    df2.iloc[i] = (df2.iloc[i - 1] * (1 + df.iloc[i].sum())) + df.iloc[i] 

Sie erwähnt in Kommentar, die Sie wollen nicht „Schleife durch sie“, aber ich kann nicht verstehen, wie man ohne for Schleife das gleiche zu tun. Die Hauptbeschränkung ist, dass Sie Daten aus dem neu berechneten df2[i - 1] bei der Berechnung von df2[i] verwenden möchten.

Ohne diese Anforderung (dann mit vorhandenen df[i - 1] zu berechnen df2[i]) würde es df + df.shift().fillna(0).mul(1 + df.sum(axis=1), axis=0) geben, aber das entspricht nicht Ihrer Formel.

Verwandte Themen