你好,我有以下数据帧
df =
A B
John Tom
Homer Bart
Tom Maggie
Lisa John
我想为每个名字分配一个唯一的ID并返回
^{pr2}$我所做的是:
LL1 = pd.concat([df.a,df.b],ignore_index=True)
LL1 = pd.DataFrame(LL1)
LL1.columns=['a']
nameun = pd.unique(LL1.a.ravel())
LLout['c'] = 0
LLout['d'] = 0
NN = list(nameun)
for i in range(1,len(LLout)):
LLout.c[i] = NN.index(LLout.a[i])
LLout.d[i] = NN.index(LLout.b[i])
但由于我有一个非常大的数据集,这个过程非常缓慢。在
有一个办法。首先获取唯一名称的数组:
把这个列成一个系列,把名字映射到它们各自的数字上:
^{pr2}$现在使用
applymap
和names.get
查找这些数字:并将其分配到正确的列:
注意:这假设所有值都是以名称开头的,您可能希望仅将此限制为某些列:
(注意:我假设您不关心John成为的映射的精确细节,例如,只关心其中有一个。)
方法1:可以使用
Categorical
对象作为中介:感觉你应该能够以某种方式(无论是直接还是通过生成一个序列)将范畴视为提供一个编码字典,但是我看不到一个方便的方法来做到这一点。在
方法2:可以使用
^{pr2}$rank("dense")
,它按顺序为每个值生成一个递增的数字:相关问题 更多 >
编程相关推荐