python - DataError:没有数字类型可以聚合尝试对字母数字值进行排名
问题描述
我在一个较大的数据框中有两列,它们代表我的数据库中记录的 ID 和不必唯一的 PII 数据哈希。我想要实现的是一个类似窗口的函数,它根据 ID 升序排列每个 PII 哈希(参见下面的示例)。但是,我遇到了groupby().rank()
方法链的问题,因为这些值都是字符串。为了实现这一目标,我需要进行一些转变吗?
id | sha256_cpn | rank
2bce | 1005a9eaf26b44bfd70b6430f1e86fd14add9b042d4383b6f6fcb6549e5360cb | 2
1bce | 1005a9eaf26b44bfd70b6430f1e86fd14add9b042d4383b6f6fcb6549e5360cb | 1
3bce | 1005a9eaf26b44bfd70b6430f1e86fd14add9b042d4383b6f6fcb6549e5360cb | 3
这是错误:
DataError: No numeric types to aggregate
这是我的代码:
// id = object
// sha256_cpn = object
df['rank'] = df.sort_values(['sha256_cpn', 'id']).groupby('sha256_cpn')['id'].rank(method="first")
解决方案
让我们尝试使用以下方法groupby
进行sha256_cpn
转换:id
Series.factorize
df['rank'] = df.groupby('sha256_cpn')['id']\
.transform(lambda s: s.factorize(sort=True)[0] + 1)
sort_values
then groupby
+的另一种方法cumcount
:
df['rank'] = df.sort_values(['sha256_cpn', 'id'])\
.groupby('sha256_cpn').cumcount().add(1)
id sha256_cpn rank
0 2bce 1005a9eaf26b44bfd70b6430f1e86fd14add9b042d4383b6f6fcb6549e5360cb 2
1 1bce 1005a9eaf26b44bfd70b6430f1e86fd14add9b042d4383b6f6fcb6549e5360cb 1
2 3bce 1005a9eaf26b44bfd70b6430f1e86fd14add9b042d4383b6f6fcb6549e5360cb 3
推荐阅读
- amazon-web-services - 无法连接使用 NodePort 服务公开的已创建集群
- javascript - http-server 出现问题,计算机一直在下载文件而不是加载我需要的 html 文件
- git - 如何工作和发布依赖于其他本地 repo 的 npm repo
- python-3.x - 如何将 python 后门连接到 No-IP DNS
- django - How to get difference between 2 querysets in django
- python - Django:使用对象的属性创建一个带有注释的查询集
- html - 如何将最大宽度媒体添加到 Safari CSS 媒体查询
- r - 如何在dlm中实现状态空间模型的特例?或者如何从 FKF 包中获得卡尔曼平滑器?
- python - Python发送密码非交互式
- python - Python中多个时间序列的3D图