如何映射 Pandas 数据框中的两列值位置 ID、位置名称并发现数据框中的错误?

问题描述

我的数据集有两列名称 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,检查它是否已经是 dict 中的一个键。如果它已经在,检查与它相关的值。如果当前样本的该值 == location-id,则转到下一个样本。如果值和位置名称不同,则将该新名称作为另一个添加到同一键。 遍历完整数据集后,获取包含多个值的键值对以发现数据集中的错误

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

解决方法

使用分组依据,然后按以下方式过滤这些国家/地区:

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

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

,

使用布尔掩码查找同一位置 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