2017-03-03 7 views
1
anhängen

Ich bin fest und brauche Hilfe. Ich habe folgenden Datenrahmen:pandas Datenrahmen an Spalte

+-----+---+---+--+--+ 
|  | A | B | | | 
+-----+---+---+--+--+ 
| 288 | 1 | 4 | | | 
+-----+---+---+--+--+ 
| 245 | 2 | 3 | | | 
+-----+---+---+--+--+ 
| 543 | 3 | 6 | | | 
+-----+---+---+--+--+ 
| 867 | 1 | 9 | | | 
+-----+---+---+--+--+ 
| 345 | 2 | 7 | | | 
+-----+---+---+--+--+ 
| 122 | 3 | 8 | | | 
+-----+---+---+--+--+ 
| 233 | 1 | 1 | | | 
+-----+---+---+--+--+ 
| 346 | 2 | 6 | | | 
+-----+---+---+--+--+ 
| 765 | 3 | 3 | | | 
+-----+---+---+--+--+ 

Spalte A hat wiederkehrende Werte wie gezeigt. Was ich tun möchte, ist jedes Mal, wenn ich die Wiederholung Wert in Spalte A sehe ich eine neue colum mit den entsprechenden Werten aus der Spalte B als Spalte C angehängt werden soll, wie unten dargestellt:

+-----+---+---+-----+ 
|  | A | B | C | 
+-----+---+---+-----+ 
| 288 | 1 | 4 | 9 | 
+-----+---+---+-----+ 
| 245 | 2 | 3 | 7 | 
+-----+---+---+-----+ 
| 543 | 3 | 6 | 8 | 
+-----+---+---+-----+ 
| 867 | 1 | 9 | 1 | 
+-----+---+---+-----+ 
| 345 | 2 | 7 | 6 | 
+-----+---+---+-----+ 
| 122 | 3 | 8 | 3 | 
+-----+---+---+-----+ 
| 233 | 1 | 1 | NaN | 
+-----+---+---+-----+ 
| 346 | 2 | 6 | NaN | 
+-----+---+---+-----+ 
| 765 | 3 | 3 | NaN | 
+-----+---+---+-----+ 

Dank.

+0

Wo ist Ihr Versuch? – blacksite

+0

Klingt wie Ihre beste Wette ist es, die Ausgabe von 'df.groupby ('A')' – BallpointBen

Antwort

0

Unter der Annahme, dass val einer der wiederholten Werte ist,

slice = df.loc[df.A == val, 'B'].shift(-1) 

schaffen wird einen Ein-Spalten-Datenrahmen mit den Werten neu indexieren zu ihren neuen Positionen.

Da keiner der neu zugewiesenen Indexwerte redundant sein sollte, können Sie verwenden, um die verschiedenen Segmente zusammenzufassen, ohne Angst davor zu haben, Daten zu verlieren. Dann einfach fügen Sie sie als neue Spalte:

df['C'] = pd.concat([df.loc[df['A'] == x, 'B'].shift(-1) for x in [1, 2, 3]]) 

Wenn die Spalte zugeordnet ist, werden die Indexwerte alle Linie bilden:

A B C 
0 1 4 9.0 
1 2 3 7.0 
2 3 6 8.0 
3 1 9 1.0 
4 2 7 6.0 
5 3 8 3.0 
6 1 1 NaN 
7 2 6 NaN 
8 3 3 NaN 
+0

Danke zu manipulieren. Das funktioniert. – magicsword

0

den Datenrahmen, um umkehren, GROUPBY es gegen Shift-Funktion verwandeln, und kehren Sie es zurück:

df = df[::-1] 
df['C'] = df.groupby(df.columns[0]).transform('shift') 
df = df[::-1] 
df 

    A B  C 
0 1 4 9.0 
1 2 3 7.0 
2 3 6 8.0 
3 1 9 1.0 
4 2 7 6.0 
5 3 8 3.0 
6 1 1 NaN 
7 2 6 NaN 
8 3 3 NaN 
Verwandte Themen