我有一个数据集,我想用更快的方法删除一些行。我试过下面的代码,但花了很长时间
我想删除每一个操作少于3次的用户。你知道吗
每个操作都存储在一行中,其中user\u id不是我的数据的id
undesirable_users=[]
for i in range(len(operations_per_user)):
if operations_per_user.get_value(operations_per_user.index[i])<=3:
undesirable_users.append(operations_per_user.index[i])
for i in range(len(undesirable_users)):
data = data.drop(data[data.user_id == undesirable_users[i]].index)
data
是数据帧,operation_per_user
是由:operation_per_user = data['user_id'].value_counts()
创建的序列。你知道吗
不必删除,只需选择要继续还原逻辑条件的行即可。你知道吗
首先,只选择要保留的用户。
然后得到一个布尔列表,长度等于
data
行。最后,选择要保留的行。你知道吗
data
是一个DataFrame
,并且它同时包含user_id
和operations_per_user
列,则应该使用以下内容执行删除:编辑
不必创建单独的序列,您可以使用以下命令将
operations_per_user
添加到data
:您可以如上所述执行拖放,也可以使用反向逻辑条件执行选择:
原创
如果您能提供更多关于代码中使用的变量的信息,那就更好了。你知道吗
operations_per_user
是一个大熊猫Series
,您的第一个循环可以通过以下方法得到改进:函数
get_value()
已弃用,请改用loc
或iloc
。This是loc
和iloc
的一个很好的总结,而here是一个很好的参考资料。你知道吗为什么不直接过滤呢?你根本不需要循环。你知道吗
您可以通过以下方式获得筛选的索引:
然后可以从df中筛选这些索引,从而得出解决方案:
编辑
我的理解是,您希望删除数据中出现次数少于3次的任何用户。您不需要为此创建
value_counts
列表,您可以执行groupby
并找到计数,然后在此基础上进行筛选。你知道吗相关问题 更多 >
编程相关推荐