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條經驗 獲得超8個贊
您可以使用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
添加回答
舉報