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

How to map two column values in a pandas dataframe (location-id, location-name) and spot errors in the dataframe?

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

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

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

有没有办法找出错误的条目?

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

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

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

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

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

使用分组依据,然后按如下所示筛选这些国家/地区:

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

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