2017-06-20 7 views
1

Ich habe einen Datenrahmen wie folgt, nur ein Beispiel.Python2.7 Datenframe: neue Spalte aus existierender Spalte Wert hinzufügen

date  y  w diff 
2010-1-1 3  1 3 
2010-1-2 4  1 4 
2010-1-3 5  1 2 
2010-1-4 6  2 5 
2010-1-5 7  2 6 
2010-1-6 8  2 5 
2010-1-7 9  3 2 
2010-1-8 10 4 4 
2010-1-9 11 5 5 
2010-1-10 12 6 6 
2010-1-11 13 5 6 

Jetzt zum Beispiel i der Index der Datenrahmen ist, möchte ich für die Datenrahmen neue Spalte hinzuzufügen, gibt es drei neue Spaltenname ist wie, P1, P2, P3, aber der Wert ist Wert der beiden vorangegangenen Datum. Natürlich sind die vorhergehenden zwei Reihen von Werten p1, p2 Nan. Von 3-5 Reihen sind der Wert von p1, p2 alle 3, 4, und der Wert von p3 ist der Wert des letzten Diff der vorhergehenden zwei Reihen, ich meine von 3-5 Reihen den Wert von p3 alle sind 4. Ich benutze die fünf Zeilen als Periode. Ich meine die 8-10 Zeilen, um den Wert von p1, p2, p3 sind 8, 9, 2. Die neuen Datenrahmen wie folgend:

date  y  w diff p1 p2 p3 
2010-1-1 3  1 3 Nan Nan Nan 
2010-1-2 4  1 4 Nan Nan Nan 
2010-1-3 5  1 2 3 4 4 
2010-1-4 6  2 5 3 4 4 
2010-1-5 7  2 6 3 4 4 
2010-1-6 8  2 5 Nan Nan Nan 
2010-1-7 9  3 2 Nan Nan Nan 
2010-1-8 10 4 4 8 9 2 
2010-1-9 11 5 5 8 9 2 
2010-1-10 12 6 6 8 9 2 
2010-1-11 13 5 6 Nan Nan Nan 

Wenn es etwas, das Sie nicht verstehen, meine Frage, bitte kommentiere es. Vielen Dank!

Antwort

1

Sie können groupby von array g verwenden, indem arange und Boden Division mit benutzerdefinierter Funktion mit shift und stellen Sie dann Werte in numpy Array von Anforderungen erstellt. hinzufügen Zuletzt Original von join:

df['date'] = pd.to_datetime(df['date']) 
g = np.arange(len(df.index)) // 5 

def f(x): 
    x = x.shift(2) 
    a = x.values 
    if a.shape[0] > 3: 
     a[3,1] = a[3, 0] 
     a[3,0] = a[2, 0] 
     a[2] = a[3] 
     a[4] = a[3] 
    return pd.DataFrame(a, index=x.index, columns=['p1','p2','p3']) 


df1 = df.groupby(g)['y','w','diff'].apply(f) 
print (df1) 
    p1 p2 p3 
0 NaN NaN NaN 
1 NaN NaN NaN 
2 3.0 4.0 4.0 
3 3.0 4.0 4.0 
4 3.0 4.0 4.0 
5 NaN NaN NaN 
6 NaN NaN NaN 
7 8.0 9.0 2.0 
8 8.0 9.0 2.0 
9 8.0 9.0 2.0 
10 NaN NaN NaN 

df2 = df.join(df1) 
print (df2) 
     date y w diff p1 p2 p3 
0 2010-01-01 3 1  3 NaN NaN NaN 
1 2010-01-02 4 1  4 NaN NaN NaN 
2 2010-01-03 5 1  2 3.0 4.0 4.0 
3 2010-01-04 6 2  5 3.0 4.0 4.0 
4 2010-01-05 7 2  6 3.0 4.0 4.0 
5 2010-01-06 8 2  5 NaN NaN NaN 
6 2010-01-07 9 3  2 NaN NaN NaN 
7 2010-01-08 10 4  4 8.0 9.0 2.0 
8 2010-01-09 11 5  5 8.0 9.0 2.0 
9 2010-01-10 12 6  6 8.0 9.0 2.0 
10 2010-01-11 13 5  6 NaN NaN NaN 
+0

dank @jezrael gibt es eine weitere Frage ist, könnten Sie mir helfen it.https zu lösen: //stackoverflow.com/questions/44752876/python2-pandas - wie man einen Teil eines anderen Datenrahmens in einen Datenrahmen einfügt – tktktk0711

Verwandte Themen