亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Pandas 檢查列值是否等于另一列的名稱,然后設置 0 或 1

Pandas 檢查列值是否等于另一列的名稱,然后設置 0 或 1

慕哥6287543 2023-11-09 21:27:00
這是一個看似簡單的問題,但我似乎無法弄清楚。我有一個像這樣的數據框如果“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 個二進制列需要循環。任何幫助表示感謝,謝謝!
查看完整描述

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


查看完整回答
反對 回復 2023-11-09
?
largeQ

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


查看完整回答
反對 回復 2023-11-09
  • 2 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號