python中(DataFrame數(shù)據(jù)框)通過給一個變量的值打標簽生成另一個變量,用循環(huán)結(jié)合iloc賦值太慢怎么辦?
學生:
老師 我問你個問題
for i in range(0,len(rfm_.iloc[:,0])): if rfm_.iloc[i,0] > F_mean: rfm_.iloc[i,0] = 1 else: rfm_.iloc[i, 0] = 0 if rfm_.iloc[i,1] < R_mean: rfm_.iloc[i, 1] = 1 else: rfm_.iloc[i, 1] = 0 if rfm_.iloc[i,2] > M_mean: rfm_.iloc[i, 2] = 1 else: rfm_.iloc[i, 2] = 0
如果就這樣打標簽的話 我這個用戶量來計算的話 代碼要跑很久嗎。。。
也就126W
怎么跑不出來了
老師:是的,會跑很久,因為這個命令效率比較低
學生:
不是 我現(xiàn)在是打標簽
就是用用戶的指標均值作為閾值
所以就是很慢的是吧
就是我用for循環(huán)的話就是很慢 那有什么比較快的方法嗎
好糾結(jié)
老師:你是要根據(jù)一個變量生成一個標簽變量嗎
學生:是的
老師:我想想啊
學生:我飯都吃完了 還沒跑出來。。我感覺哪里有問題哇
老師:你的那個變量是什么樣子的,取值什么樣,給我截個圖
學生:
然后跟指標的均值做比較 去打標簽
我還沒敢家維度
這都跑不出來了
不知道是代碼有問題還是什么原因 都好久了
老師:
你把rfm那個數(shù)據(jù)框的表頭和前幾條記錄給我貼一下
這樣方便我給你寫命令
學生:
F R M
用戶ID
_637276942176622229 11 45.0 166.17
_637276942176769136 11 50.0 66.73
_637276942177839833 37 18.0 143.02
_637276942181248783 24 29.0 167.35
_637276942181646749 4 27.0 39.75
老師:然后把打標簽的規(guī)則告訴我,也就是生成三個標簽變量對吧
學生:
# 標注每個用戶的RFM值 == 這里用各指標的均值作為閾值
R_mean = rfm_["R"].mean()
F_mean = rfm_["F"].mean()
M_mean = rfm_["M"].mean()
print(R_mean,F_mean,M_mean)
老師:然后打標簽為0或者1對不
學生:
對
這個循環(huán)不敢跑了 感覺會耽誤好多時間 不知道什么鬼
老師:
循環(huán)不能大規(guī)模用
R_mean = rfm_["R"].mean()
F_mean = rfm_["F"].mean()
M_mean = rfm_["M"].mean()
rfm_["RLabel"]=rfm_["R"].map(lambda x:1 if x<R_mean else 0)
rfm_["FLabel"]=rfm_["F"].map(lambda x:1 if x>F_mean else 0)
rfm_["MLabel"]=rfm_["M"].map(lambda x:1 if x>M_mean else 0)
執(zhí)行這個代碼試試,這個速度比較快
那個循環(huán)要一個一個循環(huán),很慢
這個map是同時執(zhí)行所有的記錄,會很快的
學生:
臥槽。。
這個這么快
一秒。。。
真NB臥槽








暫無數(shù)據(jù)