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

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

使用 one-hot 編碼分割字符串并將 df 從長格式轉換為寬格式

使用 one-hot 編碼分割字符串并將 df 從長格式轉換為寬格式

開滿天機 2023-07-11 14:45:25
以下是相關 df 的簡化版本的腳本:df = pd.DataFrame({                'id' : [1,1,2,2,3,3],                'feature': ['colour','interior_features','colour','interior_features','colour','interior_features'],               'feature_value' : ['blue','cd_player<->sat_nav<->usb_port','red','cd_player<->usb_port','red','cd_player<->sat_nav<->sub_woofer'],                 })df   id   feature             feature_value0   1   colour              blue1   1   interior_features   cd_player<->sat_nav<->usb_port2   2   colour              red3   2   interior_features   cd_player<->usb_port4   3   colour              red5   3   interior_features   cd_player<->sat_nav<->sub_woofer首先,我想將'interior_features'中的字符串轉換 為一個列表,其中'<->'是分隔符,如下所示:    id  feature             feature_value0   1   colour              blue1   1   interior_features   [cd_player, sat_nav, usb_port]2   2   colour              red3   2   interior_features   [cd_player, usb_port]4   3   colour              red5   3   interior_features   [cd_player, sat_nav, sub_woofer]然后我想取消該列表的嵌套,并使用 one-hot 編碼將二進制值分配給“feature_value”列中的“interior_features”。預期DF:    id  feature     feature_value0   1   colour      blue1   1   cd_player   12   1   sat_nav     13   1   usb_port    14   1   sub_woofer  05   2   colour      red6   2   cd_player   17   2   sat_nav     08   2   usb_port    19   2   sub_woofer  010  3   colour      red11  3   cd_player   112  3   sat_nav     113  3   usb_port    014  3   sub_woofer  1任何幫助將非常感激。
查看完整描述

1 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

split然后您可以嘗試explode填充crosstab每個 id 的缺失行


df1 = df.loc[df['feature']=='colour'] 

# slice out the row do not need to unnest

df2 = df.drop(df1.index)    

df2['feature'] = df2['feature_value'].str.split('<->')

s = df2.explode('feature') 

s = pd.crosstab(s['id'],s['feature']).stack().reset_index(name='feature_value')

out = pd.concat([df1,s]).sort_values('id')

out

Out[356]: 

    id     feature feature_value

0    1      colour          blue

0    1   cd_player             1

1    1     sat_nav             1

2    1  sub_woofer             0

3    1    usb_port             1

2    2      colour           red

4    2   cd_player             1

5    2     sat_nav             0

6    2  sub_woofer             0

7    2    usb_port             1

4    3      colour           red

8    3   cd_player             1

9    3     sat_nav             1

10   3  sub_woofer             1

11   3    usb_port             0


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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