【发布时间】:2021-08-07 03:36:23
【问题描述】:
我有一个公司数据集。每个公司都有纳税人号码、地址、电话等一些字段。这是我从 Roméo Després 那里得到的 Pandas 代码:
import pandas as pd
df = pd.DataFrame({
"tax_id": ["A", "B", "C", "D", "E", "A", "B", "C", "F", "E"],
"phone": [0, 1, 2, 3, 4, 5, 0, 0, 6, 3],
"address": ["x", "y", "z", "x", "y", "x", "t", "z", "u", "v"],
})
print(df)
tax_id phone address
0 A 0 x
1 B 1 y
2 C 2 z
3 D 3 x
4 E 4 y
5 A 5 x
6 B 0 t
7 C 0 z
8 F 6 u
9 E 3 v
我需要通过这些字段对数据集进行重复数据删除,这意味着非唯一公司只能通过这些字段之一链接。 IE。某些公司在我的列表中绝对是唯一的,前提是它没有任何关键字段的任何匹配项。如果公司与其他实体共享纳税人编号,并且该实体与第三个实体共享地址,则所有三个公司都是同一个。独特公司的预期产出应该是:
tax_id phone address
0 A 0 x
1 B 1 y
2 C 2 z
8 F 6 u
每个副本的预期输出以及唯一的公司索引应如下所示:
tax_id phone address representative_index
0 A 0 x 0
1 B 1 y 1
2 C 2 z 2
3 D 3 x 0
4 E 4 y 1
5 A 5 x 0
6 B 0 t 0
7 C 0 z 0
8 F 6 u 8
9 E 3 v 3
在这种情况下,如何使用 python/pandas 过滤掉重复项?
我想到的唯一算法是以下直接方法:
- 我按第一个键对数据集进行分组,将其他键收集为集合 结果数据集
- 然后我用第二个键迭代地走过集合,然后 添加到我的分组数据集中以获得第一个键新的第二个键的一些值 值,一遍又一遍地迭代它们。
- 最后没有什么要补充的了,我对第三个键重复这个。
就性能和编码的简单性而言,这看起来不太有希望。
还有其他方法可以通过几个键之一删除重复项吗?
【问题讨论】:
-
请将您的数据的 small 子集作为可用于测试的可复制 代码片段以及您对提供数据。请参阅 MRE - Minimal, Reproducible, Example 和 How to make good reproducible pandas examples。
-
亨利,完成。谢谢!
-
@HenryEcker,刚刚添加了预期的输出。
-
只需在数据帧上使用drop_duplicates 方法
标签: python pandas algorithm duplicates dataset