2017-10-11 4 views
0

Ich habe folgende Datenrahmen df1:Verschiebungswerte basierend auf Zustand in einer Spalte

 A  B C D E F G H I J 
    0 1 11 a XX 50 Nan Nan Nan Nan Nan 
    1 2 12 b YY 10 Nan 1 Nan Nan Nan 
    2 1 11 c ZZ 70 Nan Nan 11 12 56 
    3 Nan Nan Nan Nan 0 6 10 c DD 45 
    4 3  7 e MM 12 1 7 d LL 64 
    5 Nan Nan Nan Nan 2 89 Nan f KK 13 

Ich möchte einen resultierenden Datenrahmen df2 so gebaut, dass, wenn ein Wert für das Attribut in jeder Zeile vorhanden ist F (jeder Wert, aber nicht "Nan"), kopiert dann die Werte von F, G, H, I, J für diese bestimmte Zeile und füge sie in A, B, C, D und E ist. Daher sollten die Werte der letzten drei Zeilen kopiert werden.

Die Datenrahmen resultierende df2 sollte etwas, was so aussehen:

 A  B C D E F G H I J 
    0 1 11 a XX 50 Nan Nan Nan Nan Nan 
    1 2 12 b YY 10 Nan 1 Nan Nan Nan 
    2 1 11 c ZZ 70 Nan Nan 11 12 56 
    3 6 10 c DD 45 6 10 c DD 45 
    4 1  7 d LL 64 1 7 d LL 64 
    5 89 Nan f KK 13 89 Nan f KK 13 

Jede Hilfe sicher geschätzt werden würde.

Antwort

0
In [102]: df.loc[df.F.notnull(), list('ABCDE')] = \ 
       df.loc[df.F.notnull(), list('FGHIJ')].values 

In [103]: df 
Out[103]: 
     A  B C D E  F  G H I  J 
0 1.0 11.0 a XX 50 NaN NaN NaN NaN NaN 
1 2.0 12.0 b YY 10 NaN 1.0 NaN NaN NaN 
2 1.0 11.0 c ZZ 70 NaN NaN 11 12 56.0 
3 6.0 10.0 c DD 45 6.0 10.0 c DD 45.0 
4 1.0 7.0 d LL 64 1.0 7.0 d LL 64.0 
5 89.0 NaN f KK 13 89.0 NaN f KK 13.0 
Verwandte Themen