微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法检查列表项是否是列表中的唯一项?

如何解决有没有办法检查列表项是否是列表中的唯一项?

我有一个字典列表,整个列表代表不同的国家,每个字典包含每个国家的基本数据如下: 示例一

df.countries[3]
"[{'iso_3166_1': 'DE','name': 'Germany'},{'iso_3166_1': 'US','name': 'United States of America'},{'iso_3166_1': 'IN','name': 'India'}]"

当然,还有其他单元格的国家列表只有一个这样的字典: 示例 b

df.countries[0]
"[{'iso_3166_1': 'US','name': 'United States of America'}]"

或者像这样的空列表: 示例 c

df.countries[505]
'[]'

我想做的是:

  • 删除国家名称为 United States of America BUT 的行 只有当它是列表中唯一的国家时,而不是当有 其他国家/地区,例如a

我试着集思广益,想出了这样的事情:

countryToRemove = "United States of America"
for index,row in df.iterrows():
    if countryToRemove in row['countries']:
        # row to be removed

但它会删除任何包含美国的行,即使有其他国家/地区。

编辑:我的数据框如下:

countries
0  [{'iso_3166_1': 'DE',{'is...
1  [{'iso_3166_1': 'US','name': 'United States o...
2                                                 []

解决方法

如果你有这样的数据框:

                                           countries
0  [{'iso_3166_1': 'DE','name': 'Germany'},{'is...
1  [{'iso_3166_1': 'US','name': 'United States o...
2                                                 []

然后你可以使用布尔索引来过滤你的数据框:

mask = df.countries.apply(
    lambda x: len(s := set(d["name"] for d in x)) == 1
    and s.pop() == "United States of America"
)
print(df[~mask])

打印:

                                           countries
0  [{'iso_3166_1': 'DE',{'is...
2                                                 []

编辑:没有 := 运算符的版本:

def fn(x):
    s = set(d["name"] for d in x)
    return len(s) == 1 and s.pop() == "United States of America"


mask = df.countries.apply(fn)
print(df[~mask])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。