首页 > 解决方案 > 按出现顺序分配索引

问题描述

我有一个数据框

> df = pd.DataFrame({"user_hash": ["b","a","c", "a"]})
> df
  user_hash
0         b
1         a
2         c
3         a

whereuser_hash表示长哈希值,因此为了清楚起见,我想添加一个列,该列仅按出现顺序枚举元素。在示例中,我想要的结果是:

> df2
  user_hash user_id
0         b       0
1         a       1
2         c       2
3         a       1

这个问题非常接近:问:[Pandas] 如何有效地为具有多个条目的个体分配唯一groupbyID ids要按外观顺序排列。

标签: pythonpandas

解决方案


使用pd.factorize

labels, _ = pd.factorize(df['user_hash'])
result = df.assign(user_id=labels)
print(result)

输出

  user_hash  user_id
0         b        0
1         a        1
2         c        2
3         a        1

或者作为替代使用ngroup

result = df.assign(user_id=df.groupby('user_hash', sort=False).ngroup())
print(result)

输出

  user_hash  user_id
0         b        0
1         a        1
2         c        2
3         a        1

推荐阅读