gpt4 book ai didi

python - Pandas 检查列值是否等于另一列的名称,然后设置 0 或 1

转载 作者:行者123 更新时间:2023-12-03 23:43:24 26 4
gpt4 key购买 nike

这是一个看似简单的问题,但我似乎无法弄清楚。
我有一个这样的数据框
enter image description here
如果 'animal' 中的值为 'cat',我只希望 'cat' 列的值为 1,对于 'animal' 列的其他值也是如此。
这是示例数据集:

data = pd.DataFrame({'animal':['cat','cat', 'dog', 'fish'], 'cat':[0,0,0,0],'dog':[0,0,0,0],'fish':[0,0,0,0],'lion':[0,0,0,0]})
问题是我不能简单地将值二值化,因为即使 'lion' 不在我的列值中,它仍然作为二进制列存在。 (已经定义了二进制列)。
我从另一篇文章中找到了这个,但似乎无法弄清楚它是如何工作的。
df.fillna('').apply(lambda x : x.index==x.name).astype(int).replace(0,"")
我的实际数据集有大约 100 个二进制列可以循环。
任何帮助表示赞赏,谢谢!

最佳答案

我知道已经发布了一个答案,但这里有一种使用您建议的行的方法。

data.loc[:,data.columns != 'animal'].apply(lambda x : data["animal"]==x.name).astype(int)
首先,您首先调用所有未被称为“动物”的列,因为您不需要替换它们。然后 lambda 函数遍历每一列,检查名称相同的情况。最后,“astype(int)”确保在我们期望的条件为真的情况下,值显示为 1。
要获取带有动物名称的数据框,只需将其保存到变量中,如下所示:
data.loc[:,data.columns != 'animal'] = data.loc[:,data.columns != 'animal'].apply(lambda x : data["animal"]==x.name).astype(int)

Out:
animal cat dog fish
0 cat 1 0 0
1 cat 1 0 0
2 dog 0 1 0
3 fish 0 0 1

关于python - Pandas 检查列值是否等于另一列的名称,然后设置 0 或 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64380015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com