如何以更快的方式从数据帧中删除一系列行

2024-09-30 18:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,我想用更快的方法删除一些行。我试过下面的代码,但花了很长时间

我想删除每一个操作少于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()创建的序列。你知道吗


Tags: 数据inidfordataindexlenvalue
3条回答

不必删除,只需选择要继续还原逻辑条件的行即可。你知道吗

首先,只选择要保留的用户。
然后得到一个布尔列表,长度等于data行。
最后,选择要保留的行。你知道吗

keepusers = operation_per_user.loc[operation_per_user > 3]
tokeep = [uid in keepuser for uid in data['user_id']]
newdata = data.loc[tokeep]
  • 如果data是一个DataFrame,并且它同时包含user_idoperations_per_user列,则应该使用以下内容执行删除:
data = data.drop(data.loc[data['operations_per_user'] <= 3].index)

编辑

不必创建单独的序列,您可以使用以下命令将operations_per_user添加到data

data['operations_per_user'] = data.loc[:, 'user_id'].value_counts()

您可以如上所述执行拖放,也可以使用反向逻辑条件执行选择:

data = data.loc[data['operations_per_user' > 3]]

原创

如果您能提供更多关于代码中使用的变量的信息,那就更好了。你知道吗

  • 如果operations_per_user是一个大熊猫Series,您的第一个循环可以通过以下方法得到改进:
undesirable_users=[] 
for i in operations_per_user.index:
    if operations_per_user.loc[i] <= 3:
        undesirable_users.append(i)

函数get_value()已弃用,请改用locilocThislociloc的一个很好的总结,而here是一个很好的参考资料。你知道吗

  • 可以将python列表用作迭代器;对于第二个循环:
for user in undesirable_users:
    data = data.drop(data.loc[data['user_id'] == user].index)

为什么不直接过滤呢?你根本不需要循环。你知道吗

您可以通过以下方式获得筛选的索引:

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)]

相关问题 更多 >