使用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)。新值列表需要以正确的顺序反映出来。谢谢您的帮助。
答案 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')