我想你想按列名称分组:
g = df.groupby('column_name')
例如,您可以使用过滤器来仅返回那些在 column_name 中出现超过 10 次的内容的行:
g.filter(lambda x: len(x) >= 10)
要使用“RARE_VALUE”覆盖列,您可以使用转换(计算结果once对于每个组,并适当地分散它):
df.loc[g[col].transform(lambda x: len(x) < 10).astype(bool), col] = 'RARE_VALUE'
正如 DSM 指出的,以下技巧是much faster:
df.loc[df[col].value_counts()[df[col]].values < 10, col] = "RARE_VALUE"
以下是一些 timeit 信息(以显示 DSM 的解决方案是多么令人印象深刻!):
In [21]: g = pd.DataFrame(np.random.randint(1, 100, (1000, 2))).groupby(0)
In [22]: %timeit g.filter(lambda x: len(x) >= 10)
10 loops, best of 3: 67.2 ms per loop
In [23]: %timeit df.loc[g[1].transform(lambda x: len(x) < 10).values.astype(bool), 1]
10 loops, best of 3: 44.6 ms per loop
In [24]: %timeit df.loc[df[1].value_counts()[df[1]].values < 10, 1]
1000 loops, best of 3: 1.57 ms per loop