微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

识别数据帧中重复出现的值对

如何解决识别数据帧中重复出现的值对

我已经构建了一个工具来识别 Pandas 数据框中的重复值对。

索引 姓名1 name2 name3 name4 name5
0 蒂姆 皮特 史蒂夫 鲍勃 路易莎
1 皮特 蒂姆 艾丹 凯特 凯丝
2 凯文 克莱尔 伊恩 蒂姆 皮特
3 鲍勃 路易莎 蒂姆 皮特 托比
4 史蒂夫 克莱尔

该工具将从上述(非常小的)数据集中通知存在以下对:

名称 频率
路易莎和鲍勃 2
皮特和鲍勃 2
皮特和路易莎 2
蒂姆和鲍勃 2
蒂姆和路易莎 2
蒂姆和皮特 4

为此,我采取了以下步骤:

  1. 为每部电影创建一个布尔值向量,其值根据每个演员的外表设置(我实际上在这里使用 SciPy 的 csr_matrix() 类)
  2. 取此向量及其转置的外积。
  3. 将此矩阵添加到累加器矩阵(其类型为 int,同样属于 csr_matrix 类),在对角线上和上方丢弃了值。
  4. 在累加器中的任何值超过 1 时标识。这些值中的每一个都表示一对的重复出现。我已经在新的 DF 中记录了这些对,其中包含 Louisa & Bob、Pete & Bob 等列。
  5. 计算此 DF 中的非零值以获得每个转换对出现频率的计数。
  6. 这些计数加了 1。

我相信这是一个很好的系统,用于识别这些“强制转换对”的出现频率。但是,我想知道每个演员对都出演了哪些电影:我的数据不足,但是,每个演员对的第一次出现。

我看到有几种方法可以解决这个问题:

  1. 使用更高等级的数组:我可以堆叠在第 3 步中计算的矩阵。这将允许我返回上一次(第一次)出现的事件,因为我会保留这些信息。
  2. 迭代每个强制转换对,并使用逻辑和比较来确定出现的次数

选项 1 似乎一点也不简单。我正在使用的实际 DF 包含大约 11,000 行,识别出的转换对的数量约为 3,300。并且 SciPy csr_matrix 不支持与 NumPy ndarrays 类似的“堆叠”或更高等级的原则。我可以创建 11,000 个新的 csr_matrix 对象,但这似乎不是最佳实践。

而且选项 2 很丑!

这不是一个具体的问题,所以可能不合适,但我会重视您提供的任何评论/建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。