我有一个数据集,我想用更快的方法删除一些行。我尝试过以下代码,但花了很长时间
我想删除每个操作次数少于 3 次的用户。
每个操作都存储在一行中,其中user_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()
。
最佳答案
为什么不直接过滤它们呢?您根本不需要循环。
您可以通过以下方式获取过滤后的索引:
operations_per_user.index[operations_per_user <= 3]
然后你可以从 df 中过滤这些索引,得到解决方案:
data = data[data['user_id'] not in (operations_per_user.index[operations_per_user <= 3])]
编辑
我的理解是,您想要删除数据中出现次数少于 3 次的任何用户。您不需要为此创建 value_counts
列表,您可以执行 groupby
并查找计数,然后在此基础上进行过滤。
filtered_user_ids = data.groupby('user_id').filter(lambda x: len(x) <= 3)['user_id'].tolist()
data = data[~data[user_id].isin(filtered_user_ids)]
关于python - 如何以更快的方式从数据框中删除一系列行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55961195/