2017-01-23 3 views
2

Ich habe einen Datenrahmen mit einem colum mit id: s können Duplikate enthalten:Pandas neu zuordnen, um im Bereich Spalte

>>> df['user_id'].head() 
Out[3]: 
0 2134 
1 1234 
2 4323 
3 25434 
4 1234 
Name: user_id, dtype: int64 

Wie kann ich diese neu zuordnen, so dass der Benutzer-ID aus einer beliebigen Zahl geht das und mehr, schrittweise nach der ursprünglichen Nummer? In diesem Beispiel wird es die folgenden sein, ausgehend von 2:

>>> df['user_id'].head() 
Out[3]: 
0 3 
1 2 
2 4 
3 5 
4 2 
Name: user_id, dtype: int64 

Antwort

1

IIUC, möchten Sie durch die Werte in dieser Spalte die df sortieren, zuerst und verwenden dann factorize:

In [29]: 
df1 = df.reindex(df['user_id'].sort_values().index) 
df1 

Out[29]: 
     user_id 
index   
1   1234 
4   1234 
0   2134 
2   4323 
3  25434 

In [30]:  
df1['new_id'] = pd.factorize(df1['user_id'])[0] + 2 
df1 

Out[30]: 
     user_id new_id 
index     
1   1234  2 
4   1234  2 
0   2134  3 
2   4323  4 
3  25434  5 

Anschließend können Sie den Index wiederherstellen sort_index mit:

In [31]: 
df1 = df1.sort_index() 
df1 

Out[31]: 
     user_id new_id 
index     
0   2134  3 
1   1234  2 
2   4323  4 
3  25434  5 
4   1234  2 

Sie können dann überschreiben Sie oder lassen Sie eine Spalte fallen, das oben genannte soll nur zeigen, wie man die Werte erhält, die Sie wünschen

+0

Cool! Wenn ich mich nicht um den Index kümmere oder die alten IDs speichere, mache ich das einfach, oder? df1 ['user_id'] = pd.factorize (df1 ['user_id']) [0] – user1506145

+1

@ user1506145 sicher oder rufen Sie 'reset_index (drop = True)' auf, damit der Index wieder von '0' startet – EdChum

0

die Frage Art verwirrend ist .. Ich bin nicht sicher, ob Sie die Benutzer-ID durch eine beliebige Anzahl erhöhen möchten oder wenn Sie nur wollen, zeigen, Benutzer-IDs über einer bestimmten Schwelle ... so werde ich eine Lösung für beide geben.

df [ 'user_id'] Karte (lambda x: x + 2) geben Ihnen die benutzerkennungen +2

df.loc [df ['Benutzer-ID']> 2] gibt nur Benutzer-IDs höher als 2 zurück

, wenn Sie die Benutzer-IDs können Sie sortieren möchten:

df [ 'user_id'] sort_values ​​()

Hoffnung, das hilft.!

+0

Danke, aber weder. Ich möchte die Benutzer-ID neu zuordnen: s, so dass sie bei 2 beginnen und inkrementell um Eins erhöht werden. Schau dir die Beispielausgabe an :) – user1506145

Verwandte Themen