gpt4 book ai didi

python - Pandas 减少 value_counts() 表格中分类变量的数量

转载 作者:行者123 更新时间:2023-12-01 03:44:42 27 4
gpt4 key购买 nike

Pandas 新手,我想执行类似 Reduce number of levels for large categorical variables 的操作(分类变量的分箱以降低其水平)以下代码在 R 中运行良好

DTsetlvls <- function(x, newl)  
setattr(x, "levels", c(setdiff(levels(x), newl), rep("other", length(newl))))

我的数据框:

df = pd.DataFrame({'Color': 'Red Red Blue'.split(),
'Value': [100, 150, 50]})

df['Counts'] = df.groupby('Color')['Value'].transform('count')
print (df)

Color Value Counts
0 Red 100 2
1 Red 150 2
2 Blue 50 1

我会手动创建一个聚合列,然后基于该列标记不太频繁的组,例如“蓝色”作为单个“其他”组。但与简洁的 R 代码相比,这似乎很笨拙。这里正确的方法是什么?

最佳答案

您可以使用value_countsnumpy.where ,其中条件为 isin

如果您的变量是对象类型,请参见下文。如果您的变量属于类别类型,则向下跳至底部。

df = pd.DataFrame({'Color':'Red Red Blue Red Violet Blue'.split(), 
'Value':[11,150,50,30,10,40]})
print (df)
Color Value
0 Red 11
1 Red 150
2 Blue 50
3 Red 30
4 Violet 10
5 Blue 40

a = df.Color.value_counts()
print (a)
Red 3
Blue 2
Violet 1
Name: Color, dtype: int64

#get top 2 values of index
vals = a[:2].index
print (vals)
Index(['Red', 'Blue'], dtype='object')
<小时/>
df['new'] = np.where(df.Color.isin(vals), 0,1)
print (df)
Color Value new
0 Red 11 0
1 Red 150 0
2 Blue 50 0
3 Red 30 0
4 Violet 10 1
5 Blue 40 0

或者,如果需要替换所有非顶级值,请使用 where :

df['new1'] = df.Color.where(df.Color.isin(vals), 'other')
print (df)
Color Value new1
0 Red 11 Red
1 Red 150 Red
2 Blue 50 Blue
3 Red 30 Red
4 Violet 10 other
5 Blue 40 Blue
<小时/>

对于类别类型:

df = pd.DataFrame({'Color':'Red Red Blue Red Violet Blue'.split(), 
'Value':[11,150,50,30,10,40]})
df.Color = df.Color.astype('category')

a= df.Color.value_counts()[:2].index
print(a)
CategoricalIndex(['Red', 'Blue'],
categories=['Blue', 'Red', 'Violet'],
ordered=False, dtype='category')

请注意,紫罗兰色仍然是一个类别。所以我们需要.remove_unused_categories() .

vals = df.Color.value_counts()[:2].index.remove_unused_categories()
CategoricalIndex(['Red', 'Blue'],
categories=['Blue', 'Red'],
ordered=False, dtype='category')

正如评论中提到的,设置新变量时会发生 ValueError 。解决这个问题的方法是改变类型。

df['new1'] = df.Color.astype('object').where(df.Color.isin(vals), 'other')
df['new1'] = df['new1'].astype('category')

关于python - Pandas 减少 value_counts() 表格中分类变量的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39099217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com