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

标签 python dataframe

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

我想删除每个操作次数少于 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/

相关文章:

python - 获取node下所有文本节点的绝对xpath

python - 运行 MatplotLib Python 代码导入错误

python - 在非 NaN 的列中查找第一个和/或最后一个值的索引

python - 如何按位置对 Pandas 数据框进行切片?

python - 在列表中查找匹配和不匹配的项目

适用于 Mac 的 Python Winsound 等效项

python - 如何将 defaultdict 中的每个计数相加?

python - 如何将相同的 cat.codes 应用于 2 个不同的数据帧?

r - 为缺失数据插入行并进行插值

python - 将日期分配给下面的所有行,直到下一个日期