提问人:BeaverFever 提问时间:11/5/2023 最后编辑:BeaverFever 更新时间:11/5/2023 访问量:38
Python:如果数据帧列与字典键匹配,则返回新列的布尔值
Python: If dataframe column matches dictionary key then return boolean for new column
问:
我很难让它工作。所以总结一下:我有一个 DataFrame,我有一个字典,其中包含某个 DataFrame 值中某些值的键,如果它们匹配与否,我想创建一个 true/false 的新 DataFrame 列。
因此,下面是一个数据示例:
animal_list = ['dog', 'cat', 'dog', 'fish', 'bird', 'dog', 'bug', 'bird', 'snake']
animal_dict = {'dog': [3], 'bird': [2]}
animals = pd.DataFrame(animal_list, columns = ['Pets'])
animals
基本上,我想要一个新列,如果它与键匹配,则带有布尔值 True,如果不匹配,则为 False。
或者,我想我可以完全跳过字典,如果我可以创建新列,并查询现有列中是否有多个值实例(“宠物”)。因此,对于狗和鸟来说,这是真的,但对于其他一切都是错误的。
更新:这是我使用的解决方案,供其他可能正在搜索它的人使用。我最初有这个功能,但使用的是 apply 方法而不是 map(如下面的 algebruh 所建议的)
def find_key(find_value):
for k, v in animal_dict.items():
if k == find_value:
return True
return False
animals['multiple'] = animals['Pets'].map(find_key)
答:
1赞
Nick
11/5/2023
#1
您可以简单地检查是否 isin
:animals['Pets']
animals_dict
animals['multiple'] = animals['Pets'].isin(animal_dict)
输出:
Pets multiple
0 dog True
1 cat False
2 dog True
3 fish False
4 bird True
5 dog True
6 bug False
7 bird True
8 snake False
评论
0赞
BeaverFever
11/5/2023
是的,这也有效。我记得过去做过这样的事情,但记不清了。不过,出于某种原因,仍然想知道如何从字典中做到这一点。同样在我的实际数据集中,我使用 0 和 1,因此我可以进行 SMOTE 增强。
0赞
Nick
11/5/2023
@BeaverFever听起来你应该发布一个问题,其中包含你的实际数据集的片段;实际数据也可能进行优化。
评论
animal.map(f)
f
s
s in animals_dict
animal.apply({"Pets": lambda x : x in animal_dict})