Pandas重新映射到列中

时间:2017-01-23 14:37:38

标签: python pandas numpy

我有一个带有id:s的colum的DataFrame,可以包含重复项:

>>> 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

2 个答案:

答案 0 :(得分: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

然后你可以覆盖或删除一列,上面只是为了演示如何获得你想要的值

答案 1 :(得分:0)

这个问题有点令人困惑..我不确定你是想用任意数字增加用户ID,还是只想显示用户ID超过某个阈值...所以我会给出一个解决方案两个:

  

df [' user_id']。map(lambda x:x + 2)会给你user_ids +2

     

df.loc [df [' user_id']> 2]只会返回高于2的user_ids

如果您想对用户ID进行排序,您可以:

  

DF [' USER_ID&#39]。sort_values()

希望有所帮助!