2 回答
TA贡献2012条经验 获得超12个赞
我知道答案已经发布,但这是使用您建议的行的方法。
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
TA贡献2039条经验 获得超7个赞
您可以使用pd.get_dummies():
data = pd.DataFrame({'animal':['cat','cat', 'dog', 'fish'], 'cat':[0,0,0,0],'dog':[0,0,0,0],'fish':[0,0,0,0]})
data = pd.get_dummies(data['animal'])
# To keep animal column use: data = data[['animal']].join(pd.get_dummies(data['animal']))
data
Out[1]:
cat dog fish
0 1 0 0
1 1 0 0
2 0 1 0
3 0 0 1
您还可以循环遍历列并查看该值是否等于该列。返回True或False。然后,只需调用.astype(int)分别变换为 1 和 0 即可。
data = pd.DataFrame({'animal':['cat','cat', 'dog', 'fish'], 'cat':[0,0,0,0],'dog':[0,0,0,0],'fish':[0,0,0,0]})
for col in data.columns[1:]:
data[col] = (data['animal'] == col).astype(int)
data
Out[218]:
animal cat dog fish
0 cat 1 0 0
1 cat 1 0 0
2 dog 0 1 0
3 fish 0 0 1
添加回答
举报