如何解决有没有办法检查列表项是否是列表中的唯一项?
我有一个字典列表,整个列表代表不同的国家,每个字典包含每个国家的基本数据如下: 示例一
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]
'[]'
我想做的是:
我试着集思广益,想出了这样的事情:
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 举报,一经查实,本站将立刻删除。