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

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

在一行而不是多行中獲取編碼的分類變量

在一行而不是多行中獲取編碼的分類變量

慕田峪7331174 2023-07-18 15:20:13
我有與此類似的原始數據框my_df = pd.DataFrame({'uid': [4, 3, 6, 4, 3, 6, 1],'days': ['D1', 'D3', 'D3', 'D4', 'D4', 'D2','D2']})  uid   days0   4   D11   3   D32   6   D33   4   D44   3   D4我使用 get_dummies() 并獲得了這種編碼數據幀。my_new_df = pd.get_dummies(my_df ,columns=['days'])uid days_D1 days_D2 days_D3 days_D40   4   1   0   0   01   3   0   0   1   02   6   0   0   1   03   4   0   0   0   14   3   0   0   0   1我想要一個數據框,其中每個 uid 的所有分類值都編碼在一行中。像這樣uid D1 D2 D3 D44    1  0  0 13    0  0  1 16    0  1  1 01    0  1  0 0我曾嘗試尋找實現此結果的優化方法,但我無法做到這一點。我的原始數據框中有 222000 個值。請建議獲取這樣的編碼分類變量的方法
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

您可以嘗試對 進行分組,uid并在之后獲取其他列的最大值get_dummies


(pd.get_dummies(my_df ,columns=['days'],prefix='',prefix_sep='')

   .groupby('uid',sort=False).max())

或者用pivot替代:


my_df.pivot_table(index="uid",columns="days",aggfunc='size',fill_value=0)

     D1  D2  D3  D4

uid                

4     1   0   0   1

3     0   0   1   1

6     0   1   1   0

1     0   1   0   0


查看完整回答
反對 回復 2023-07-18
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

您可以使用crosstab+ clip:


df = pd.crosstab(my_df['uid'], my_df['days']).clip(upper=1)

days  D1  D2  D3  D4

uid                 

1      0   1   0   0

3      0   0   1   1

4      1   0   0   1

6      0   1   1   0


查看完整回答
反對 回復 2023-07-18
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

嘗試這個選項:


ss = pd.get_dummies(my_df, columns=['days']).groupby(['uid'], as_index=False).sum()

print(ss)

輸出:


    uid days_D1 days_D2 days_D3 days_D4

0   1     0       1        0       0

1   3     0       0        1       1

2   4     1       0        0       1

3   6     0       1        1       0


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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