python - Pandas Dataframe:如何创建另一列的增量唯一值计数列
问题描述
考虑示例数据框(“值”列在这里没有意义):
df = pd.DataFrame({'key':list('AABBBC'), 'value': [1, 2, 3, 4, 5, 6]})
我想要的是一个仅计算“键”列的唯一值的列,需要注意的是值计数将递增,并且如果单元格值没有出现在前几行中,则计数只会增加。所以这里“A”将被赋值为 1,“B”为 2,“C”为 3。
期望的结果如下所示:
现在我只能通过几个步骤来实现这一点:
df1 = df.drop_duplicates('key').reset_index(drop = True).drop(columns = ['value'])
df1['count_unique'] = df1.index+1
pd.merge(df, df1.set_index(['key']), left_on = ['key'], right_index= True, how = 'left')
它看起来不是很 Pythonic,也不是最有效的。任何建议表示赞赏。
解决方案
是吗:
df['count_unique'] = df['key'].factorize()[0] + 1
输出:
key value count_unique
0 A 1 1
1 A 2 1
2 B 3 2
3 B 4 2
4 B 5 2
5 C 6 3
推荐阅读
- user-interface - 使用 Qt Designer 有没有办法将 QDockWidgets 设置为默认隐藏?
- networking - 在 Java 11 上设置应用程序网络连接超时
- azure-devops - Azure DevOps 存储库的备份
- java - 仅在服务器上使用 Spring Boot 2.3 + 安全性没有“Access-Control-Allow-Origin”
- c++ - std::cin 在 C++ 中的无限 while 循环中
- python - Gensim:为每个主题提取 100 个最具代表性的文档
- javascript - 设置表中下拉列表的选择值
- tensorflow - gpflow 模型的奇怪 `pickle`/`gpflow.utilities.freeze` 行为
- html - 下拉按钮斗争
- postgresql - PostgreSQL 和大型 CSV 文件的导入