2017-01-23 49 views
2

我有ID爲科拉姆一個數據幀:S,可以包含重複:大熊貓重新映射到的範圍列

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

我怎樣才能重新映射這使用戶ID的從任意數量的推移及以上,按原始數量遞增?在這個例子中這將是下面,從2:

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

回答

1

IIUC,你想先排序依據的值該列中的DF,然後用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 

可以使用sort_index然後恢復索引:

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 

可以然後覆蓋或刪除一列,上面只是爲了演示如何獲得你想要的值

+0

很酷!如果我不關心索引或保存舊的ID,只需要這樣做,對吧? df1 ['user_id'] = pd.factorize(df1 ['user_id'])[0] – user1506145

+1

@ user1506145確定或調用'reset_index(drop = True)'使索引再次從'0'開始 – EdChum

0

的問題是怎麼樣的混亂..我不知道,如果你想用任意數目增加用戶ID,或者如果你想只顯示用戶id高於某一閾值,所以,我將得到溶液到兩個:

DF [「USER_ID」]圖(拉姆達X:X + 2)會給你user_ids 2

df.loc [df ['user_id']> 2]將僅返回您user_id高於2

,如果你想將用戶ID可以排序

DF [ 'user_ID的'] sort_values()

希望幫助!

+0

謝謝,但都沒有。我想重新映射用戶標識:s,以便它們從2開始逐步遞增。看樣本輸出:) – user1506145