我使用的是相当大的数据帧histdf
(20M,3)。字段是Visitor_ID
、content
和time
。dataframe将用于URL推荐系统,其中Visitor_ID
是唯一的访问者标识,content是访问过的URL,time是时间戳
使用这种结构,每个唯一的访问者有多个url,但是有些访问者应该被丢弃,因为它们不会产生重要的信息(即,它们访问的url太少)
因此,我创建了一个名为user_visits
的新变量,其中histdf.Visitor_ID
中每个唯一值的行数,然后按大于10的计数对其进行过滤:
user_visits = histdf.Visitor_ID.value_counts()
mask_user = user_visits > 10
mask_user
是熊猫系列。索引是Visitor\u ID,值是布尔值(如果原始数据帧中具有该Visitor\u ID的行多于10行,则为True)
现在我想在histdf
中添加一个新列heavyuser
,其中包含来自mask_user
的True或False值
到目前为止,我所做的是使用以下代码在数据帧中设置值:
for index in histdf.index:
temp = histdf.loc[index, 'Visitor_ID']
temp2 = mask_user[temp]
histdf.set_value(index, 'heavyuser', temp2)
这是一种工作。比按行使用iterrows或其他类型的迭代要快得多。但是,它仍然很慢,处理时间超过1小时
我想知道是否还有其他性能更好的选择。摘要将读取每个Visitor_ID
的行数,如果这些行数小于阈值(在本例中为10),则在新的数据帧列中输入False或将这些行全部删除
如果有任何提示,我将不胜感激。谢谢
提取大量用户的访问者ID的第一直觉是好的,但是一旦有了它们,就不需要遍历数据帧
以下是您的方法:
输出:
如果您只想保留问题末尾提到的大量用户,您可以这样做,而无需创建第三列:
相关问题 更多 >
编程相关推荐