重新映射到列中的范围

2024-04-19 01:09:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其列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

Tags: 数据用户nameiddf数字outhead
2条回答

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

然后您可以覆盖或删除列,以上只是演示如何获得所需的值

这个问题有点让人困惑。。我不知道你是想增加一个任意数字的用户id,还是只想显示高于某个阈值的用户id。。。因此,我将给出两个问题的解决方案:

df['user_id'].map(lambda x: x+2) will give you the user_ids +2

df.loc[df['user_id']>2] will return you only user_ids higher than 2

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

df['user_id'].sort_values()

希望有帮助!你知道吗

相关问题 更多 >