ermutuxia

2021-03-03   阅读量: 434

Python

python中通过给一个变量的值打标签生成另一个变量,用循环结合iloc赋值太慢怎么办?

扫码加入数据分析学习群

python中(DataFrame数据框)通过给一个变量的值打标签生成另一个变量,用循环结合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

怎么跑不出来了

老师:是的,会跑很久,因为这个命令效率比较低

学生:

不是 我现在是打标签
就是用用户的指标均值作为阈值
所以就是很慢的是吧

就是我用for循环的话就是很慢 那有什么比较快的方法吗
好纠结

老师:你是要根据一个变量生成一个标签变量吗

学生:是的

老师:我想想啊

学生:我饭都吃完了 还没跑出来。。我感觉哪里有问题哇

老师:你的那个变量是什么样子的,取值什么样,给我截个图

学生:

5.png

然后跟指标的均值做比较 去打标签

1.png


我还没敢家维度
这都跑不出来了
不知道是代码有问题还是什么原因 都好久了

老师:
你把rfm那个数据框的表头和前几条记录给我贴一下
这样方便我给你写命令

学生:

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

老师:然后把打标签的规则告诉我,也就是生成三个标签变量对吧

学生:

# 标注每个用户的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对不

学生:

这个循环不敢跑了 感觉会耽误好多时间 不知道什么鬼

老师:


循环不能大规模用


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)


执行这个代码试试,这个速度比较快


那个循环要一个一个循环,很慢


这个map是同时执行所有的记录,会很快的

学生:


卧槽。。


这个这么快


一秒。。。


真NB卧槽

0.0000 1 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子