2017-06-21 4 views
1

Ich habe Datenrahmen mit Spalten - ID, Datum, Region, some_numeric_fieldsAktualisierung mit den neuesten Reihen

id und Datum identifiziert gesamte Zeile eindeutig wie Primärschlüssel. Mein Datenfeld ist nach dem Datum in absteigender Reihenfolge sortiert.

Ich möchte alle Werte der Region durch den Wert der Region aus der letzten Datumszeile ID und gleiche für das Datumsfeld ersetzen und numerische Felder intakt bleiben.

Beispieleingabe

enter image description here

Beispielausgabe

enter image description here

Die Daten sind zu groß, so dass ich lieber nicht statt durch jeden und jede Zeile wiederholen möchte ich etwas schneller.

Dank

Antwort

1

können Sie mask verwenden für alle Werte, ohne vorher zu NaN durch die Maske von duplicated und dann durch forward filling von ffill (fillna mit method='ffill') repalce NaN erstellt ersetzen:

df[['date','region']] = df[['date','region']].mask(df['id'].duplicated()).ffill() 

Eine andere Lösung ist Verwenden Sie transform + first:

g = df.groupby('id') 
df['region'] = g['region'].transform('first') 
df['date'] = g['date'].transform('first') 

Letzte Lösung ist Aggregat first, entfernen Spalte region und und joins:

s = df.groupby('id')['date','region'].first() 
df = df.drop(['date','region'], axis=1).join(s, on='id') 

Probe:

df = pd.DataFrame({'id':[123,123,221,221,221], 
        'date':pd.to_datetime(['2017/05/22','2017/05/21', 
              '2017/05/11','2017/05/10','2017/05/09']), 
        'region':['region1','region2','region3','region4','region5'], 
        'num field':[1,2,3,4,5]}) 
print (df) 
     date id num field region 
0 2017-05-22 123   1 region1 
1 2017-05-21 123   2 region2 
2 2017-05-11 221   3 region3 
3 2017-05-10 221   4 region4 
4 2017-05-09 221   5 region5 


df[['date','region']] = df[['date','region']].mask(df['id'].duplicated()).ffill() 
print (df) 
     date id num field region 
0 2017-05-22 123   1 region1 
1 2017-05-22 123   2 region1 
2 2017-05-11 221   3 region3 
3 2017-05-11 221   4 region3 
4 2017-05-11 221   5 region3 
Verwandte Themen