python - 从数据框中删除未出现一定次数的用户名?

标签 python pandas dataframe filtering grouping

我试图理解下面提供的内容(我在网上找到的,但不完全理解)。我想基本上删除在我的数据框中至少出现 4 次的用户名(除了删除这些名称之外,我不想以任何其他方式修改数据框)。下面的代码是否解决了这个问题,如果可以,您能解释一下过滤器与 lambda 相结合是如何实现这个问题的吗?我有以下内容:

df.groupby('userName').filter(lambda x: len(x) > 4)

我也愿意接受易于理解的替代解决方案/方法。

最佳答案

您可以查看filtration .

更大的DataFrame中更快的解决方案是 transformboolean indexing :

df[df.groupby('userName')['userName'].transform('size') > 4]

示例:

df = pd.DataFrame({'userName':['a'] * 5 + ['b'] * 3 + ['c'] * 6})

print (df.groupby('userName').filter(lambda x: len(x) > 4))
   userName
0         a
1         a
2         a
3         a
4         a
8         c
9         c
10        c
11        c
12        c
13        c

print (df[df.groupby('userName')['userName'].transform('size') > 4])
   userName
0         a
1         a
2         a
3         a
4         a
8         c
9         c
10        c
11        c
12        c
13        c

时间:

np.random.seed(123)
N = 1000000
L = np.random.randint(1000,size=N).astype(str)
df = pd.DataFrame({'userName': np.random.choice(L, N)})
print (df)

In [128]: %timeit (df.groupby('userName').filter(lambda x: len(x) > 1000))
1 loop, best of 3: 468 ms per loop

In [129]: %timeit (df[df.groupby('userName')['userName'].transform(len) > 1000])
1 loop, best of 3: 661 ms per loop

In [130]: %timeit (df[df.groupby('userName')['userName'].transform('size') > 1000])
10 loops, best of 3: 96.9 ms per loop

关于python - 从数据框中删除未出现一定次数的用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44322361/

相关文章:

python - 如何将多列分组以在 pandas DataFrame 中列出

python - 删除连续的重复项。离开中间

python - Pandas 。将数据框中具有相同值的所有列合并为单列

r - 如果行中至少有一个 Na,则将行设为 Na

python - 数据列值未更改为浮点型

python - QWebKit linkClicked 信号从不触发

Python:根据其他两列的值有条件地创建新列

python - 用于确认字符串是否为有效 Python 标识符的正则表达式?

r - 涉及数据框中相互依赖列的计算

python - 向 QTreeView/QFileSystemModel 中的项目添加附加信息