如何映射 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'])]
您可以按国家/地区排序以找到正确的条目
我的数据集有两列名称 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'])]
您可以按国家/地区排序以找到正确的条目