python - 按出现顺序分配索引
问题描述
我有一个数据框
> 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] 如何有效地为具有多个条目的个体分配唯一groupby
ID ids要按外观顺序排列。
解决方案
使用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