我希望用以下样本值索引以下熊猫数据框。数据框有很多重复项。
ID AccountName
83 CHRISTIAN UNIVERSITY
83 CHRISTIAN UNIVERSITY
83 CHRISTIAN UNIVERSITY
83 CHRISTIAN UNIVERSITY
104 UNIVERSITY
104 UNIVERSITY
1740 ELECTRIC CORPORATIO
1740 ELECTRIC CORPORATIO
1740 ELECTRIC CORPORATIO
1740 ELECTRIC CORPORATIO
...
结果数据框应为以下内容。
ID index AccountName
83 1 CHRISTIAN UNIVERSITY
83 1 CHRISTIAN UNIVERSITY
83 1 CHRISTIAN UNIVERSITY
83 1 CHRISTIAN UNIVERSITY
104 2 UNIVERSITY
104 2 UNIVERSITY
1740 3 ELECTRIC CORPORATIO
1740 3 ELECTRIC CORPORATIO
1740 3 ELECTRIC CORPORATIO
1740 3 ELECTRIC CORPORATIO
...
有人能快速有效地做到这一点吗?
答案 0 :(得分:4)
假设您要为每个新ID增加索引,我会这样做:
In [43]: df["number"] = df.ID.rank(method='dense').astype(int)
In [44]: df
Out[44]:
ID AccountName number
0 83 CHRISTIAN UNIVERSITY 1
1 83 CHRISTIAN UNIVERSITY 1
2 83 CHRISTIAN UNIVERSITY 1
3 83 CHRISTIAN UNIVERSITY 1
4 104 UNIVERSITY 2
5 104 UNIVERSITY 2
6 1740 ELECTRIC CORPORATIO 3
7 1740 ELECTRIC CORPORATIO 3
8 1740 ELECTRIC CORPORATIO 3
9 1740 ELECTRIC CORPORATIO 3
给出最低ID的数字1,第二最低ID 2,等等,与它们在帧中实际出现的顺序无关(例如,如果您将ELECTRIC_CORPORATIO放在第二位,它仍将获得#3,因为1740是第三个数字。)
还有其他方法可以确保群集是连续的,例如
(~df["ID"].duplicated()).cumsum()
但是,这通常比将唯一ID映射到唯一号码恕我直言要可靠得多。
此外,我在这里使用“数字”作为列名而不是“索引”,因为这会导致框架的索引和名为“索引”的列之间的混淆。