2017-01-23 71 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