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

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

python pandas 按值計數重新標記值

python pandas 按值計數重新標記值

守著一只汪 2023-09-12 17:34:33
給出以下示例:example = pd.DataFrame({'y':[1,1,1,1,1,1,1,1,1,1,2,2,2,2,0,0,-1,-1,-1]})我想按頻率計數按降序重新標記這些值。因此,我希望將案例數最多的值(例如 1)替換為 0,然后將下一個最大的 bin 替換為 1,依此類推所有值。需要注意的是我想忽略值為 -1 的情況。如果我運行value_counts(),我可以看到這個:y  1    10 2     4-1     3 0     2dtype: int64但我想要一個 pythonic 和非 hacky/clean 解決方案來創建以下內容:    y0   01   02   03   04   05   06   07   08   09   010  111  112  113  114  215  216 -117 -118 -1y  0    10 1     4-1     3 2     2dtype: int64(理想情況下,我也保留舊的專欄,以便保存良好的記錄)。我可以循環每個值,檢查它是否不是 -1,然后value_counts()用迭代次數替換它,但這感覺維護成本很高。有沒有一種干凈的方法來實現它?
查看完整描述

1 回答

?
米脂

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

由after?withoutSeries.map的索引創建的字典使用:SeriesSeries.value_counts-1


s = example['y'].value_counts().drop(-1)

d = {v:k for k, v in dict(enumerate(s.index)).items()}

或者:


s = example['y'].value_counts().drop(-1)

d = dict(zip(s.index, range(len(s))))

m = example['y'].ne(-1)

example.loc[m, 'y'] = example.loc[m, 'y'].map(d)

print (example)

? y

0? ?0

1? ?0

2? ?0

3? ?0

4? ?0

5? ?0

6? ?0

7? ?0

8? ?0

9? ?0

10? 1

11? 1

12? 1

13? 1

14? 2

15? 2

16 -1

17 -1

18 -1

另一個想法是增加-1價值:-1dictionary


s = example['y'].value_counts().drop(-1)

d = {**{-1:-1}, **dict(zip(s.index, range(len(s))))}


example['y'] = example['y'].map(d)




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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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