Ich habe einen Datenrahmen, in dem eine Objekt-ID einer Kollisions-ID zugeordnet ist (nicht eindeutig).
df1
objectid collisionid
0 3000 0002
1 4000 0001
2 5000 0002
Ich habe einen anderen Datenrahmen, der alle möglichen Kollisions-IDs enthält:
df2
collisionid
0 0001
1 0002
2 0003
Ich möchte df2 so aktualisieren, dass es eine Zeile aller Objekt-IDs enthält, die dieser Kollision zugeordnet sind:
df2 - GEWÜNSCHT
collisionid objectids
0 0001 4000
1 0002 3000,5000
2 0003
(In diesem Fall werden die Objekt-IDs als Zeichenfolgen gespeichert.)
Ich habe versucht, so etwas zu tun:
df2['objectids'] = df2['collisionid'].map(df1.set_index('collisionid')['objectid'])
aber ich bekomme einen Fehler Reindexing only valid with uniquely valued Index objects
. Wie mache ich das und versuche auch, die Strings zusammenzuführen?
Beginnen Sie mit dem Zusammenführen, gruppieren und aggregieren Sie dann:
(df2.merge(df1, how='left', on='collisionid')
.fillna('')
.groupby('collisionid', as_index=False)
.agg(','.join))
collisionid objectid
0 0001 4000
1 0002 3000,5000
2 0003
Für eine bestimmte Spalte agg
ändert sich Ihre Syntax ein wenig:
(df2.merge(df1, how='left', on='collisionid')
.fillna('')
.groupby('collisionid')
.agg(objectid=('objectid', ','.join)) # agg(output_name=(input_name, aggfunc))
.reset_index())
collisionid objectid
0 0001 4000
1 0002 3000,5000
2 0003
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen