使用pandas将字符串值重新映射到新标签

时间:2019-04-07 04:20:39

标签: python pandas dataframe

使用Python,我该如何使用带有值的Pandas数据框列并将其替换为新的值序列,从而实现重复和排序。例如,考虑以下值:

56-34567 
56-25767 
56-24777 
56-23987 
56-23987 
56-23987 
56-34567 

我需要创建如下内容:

ID_1 
ID_2 
ID_3 
ID_4 
ID_4 
ID_4 
ID_1 

我需要考虑多个值。在我的示例中,两次出现56-34567(ID_1),一次出现56-23987(ID_4)。新值列表需要以正确的顺序反映出来。谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用>>> name = 'E.RafatiNasr' # your name assigned to a 'name' variable >>> name[0] = 'A' # I tried changing 'E' in your name to 'A' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment groupby获取每个当前ID的唯一ID。然后,您可以连接前缀(执行此操作的几种方法)。

ngroup

df

        col
0  56-34567
1  56-25767
2  56-24777
3  56-23987
4  56-23987
5  56-23987
6  56-34567

# df.groupby('col', sort=False).ngroup().add(1).astype(str).radd('ID_') df.groupby('col', sort=False).ngroup().add(1).map('ID_{}'.format) 0 ID_1 1 ID_2 2 ID_3 3 ID_4 4 ID_4 5 ID_4 6 ID_1 dtype: object 返回的地方

ngroup

这里的df.groupby('col', sort=False).ngroup() 0 0 1 1 2 2 3 3 4 3 5 3 6 0 dtype: int64 调用很重要,因为我们希望输出顺序与输入顺序相同。


更多选项,但是不能保证相同的顺序。一种方法是使用sort=False

pd.factorize

返回一个数组,然后您可以将结果分配回去,

np.char.add('ID_', (pd.factorize(df['col'])[0] + 1).astype(str))
# array(['ID_1', 'ID_2', 'ID_3', 'ID_4', 'ID_4', 'ID_4', 'ID_1'],
#      dtype='<U24')