0

我的数据集有两列名称 location-id 和 location-name。每个位置名称都有一个唯一的位置 ID。

location-id   location-name
 234            SL
 456            IN
 234            SL
 123            EN

由于每个位置都有一个唯一的 id,因此 location-id 列和 location-name 列中的唯一值需要相等。但是 df 中似乎有一个错误,我的 location-id 有 1863 个唯一值,而 location-name 有 1800 个唯一值。

有没有办法发现错误发生在哪些条目中?

我想了一个办法。遍历这两列并创建一个包含键值对的字典。

dict_a = {234:"SL", 456:"IN", 123:"EN"}

对于每个样本,获取 location-id,检查它是否已经是字典中的键。如果它已经存在,请检查与其相关的值。如果该值 == 当前样本的位置 ID,则转到下一个样本。如果值和位置名称不同,则将该新名称作为另一个值添加到同一键。遍历完整数据集后,获取具有多个值的键值对,以发现数据集中的错误。

有没有更有效的方法来做到这一点?

4

2 回答 2

0

使用 group by 然后过滤这些国家/地区,如下所示:

t=df.groupby(['location-name']).count().reset_index()
df_filtr=df[df['location-name'].isin(t[t['location-id']>1]['location-name'])]

您可以按国家排序以找到正确的条目

于 2021-07-03T16:40:00.143 回答
0

使用布尔掩码查找相同位置 ID 的位置名称是否为多个,反之亦然。

输入数据:

>>> df
   location-id location-name
0          234            SL
1          456            IN  # IN & BE
2          234            SL
3          123            EN
4          456            BE  # IN & BE
5          789            SP  # 789 & 987
6          987            SP  # 789 & 987
is_non_unique = lambda x: len(x.unique()) > 1

m1 = df.groupby('location-id')['location-name'].transform(is_non_unique)
m2 = df.groupby('location-name')['location-id'].transform(is_non_unique)

err = df[m1|m2]

输出结果:

>>> err
   location-id location-name
1          456            IN
4          456            BE
5          789            SP
6          987            SP
于 2021-07-02T21:30:14.047 回答