如果该类别的value_count小于10,则用常量替换列值

时间:2018-09-30 22:37:08

标签: python pandas

如果该类别的值计数小于10,我想用“其他”替换熊猫数据框中的所有类别。

我正在尝试类似的事情。

df['variable'].where(df['variable'].apply(lambda x: x.map(x.value_counts()))<=10, "other")

但是出现以下错误:

AttributeError: 'str' object has no attribute 'map'

1 个答案:

答案 0 :(得分:0)

您可以通过pd.Series.value_counts计算每个值的计数数量,然后确定上限以下的计数。然后将pd.DataFrame.loc与布尔索引一起使用:

counts = df['variable'].value_counts()
idx = counts[counts.lt(10)].index

df.loc[df['variable'].isin(idx), 'A'] = 'Others'

通常应避免使用apply + lambda,因为这是非矢量化的,只不过是一个薄纱环。这是一个带有数字数据并添加了列以说明其逻辑的工作示例:

np.random.seed(0)

arr = np.random.randint(0, 12, 100)
df = pd.DataFrame({'A': arr, 'B': arr})

counts = df['A'].value_counts()
idx = counts[counts.lt(10)].index

df['counts'] = df['A'].map(counts)
df.loc[df['A'].isin(idx), 'B'] = -1

print(df)

     A  B  counts
0    5 -1       9
1    0 -1       9
2    3  3      14
3   11 -1       5
4    3  3      14
5    7  7      10
6    9 -1       9
7    3  3      14
8    5 -1       9
9    2 -1       5
10   4  4      13