Python 如何分配';其他';到低频类别?(熊猫)

Python 如何分配';其他';到低频类别?(熊猫),python,pandas,dataframe,categorical-data,Python,Pandas,Dataframe,Categorical Data,我有一个“城市”专栏,其中有1000多个独特的条目。(由于某种原因,这些条目是整数,并且当前被指定为浮点类型。) 我尝试了df['city'].value_counts()/len(df)来获取它们的频率。它返回一张桌子。前几个值为0.12、.4、.4、.3 我是一个完全的初学者,因此我不确定如何使用此信息将最后10%的所有内容分配给“其他” 我想将唯一的城市值从1000减少到10左右,这样我以后就可以使用get\u dummies。让我们看看预期操作的逻辑: 计算每个城市的频率 计算底部10%

我有一个“城市”专栏,其中有1000多个独特的条目。(由于某种原因,这些条目是整数,并且当前被指定为浮点类型。)

我尝试了
df['city'].value_counts()/len(df)
来获取它们的频率。它返回一张桌子。前几个值为0.12、.4、.4、.3

我是一个完全的初学者,因此我不确定如何使用此信息将最后10%的所有内容分配给“其他”


我想将唯一的城市值从1000减少到10左右,这样我以后就可以使用
get\u dummies

让我们看看预期操作的逻辑:

  • 计算每个城市的频率
  • 计算底部10%的百分比
  • 查找频率低于10%的城市
  • 把它们换成其他的
  • 你开始的方向是对的。要获取每个城市的频率:

    city\u freq=(df['city'].value\u counts())/df.shape[0]
    
    我们希望找到最底层的10%。我们用熊猫来做这件事:

    bottom\u decile=city\u freq.quantile(q=0.1)
    
    现在
    bottom\u decile
    是一个浮点数,表示底部10%与其余部分不同的数字。频率低于10%的城市:


    less\u freq\u cities=city\u freq[city_frequency]那么你想要你的
    city
    列中十个最常见的整数吗?@siamaksafari是的,其余的是“其他”这个问题回答了你的问题吗?@ZarakiKenpachi:不,这显然不是重复的问题。这个问题仅仅是关于计数频率,没有更多。这个问题是关于分配所有值的“长尾”将低频率的es传递给其他类/不关心类,以减少基数。完全不同。“出于某种原因,条目是整数,当前被分配为浮点类型。”您可以控制它们如何被读入的数据类型(使用
    pd.read\u csv()
    ),在pandas 1.0.x中,您现在可以指定dtype='category',而不是int或float。或者使用
    .astype()
    对它们进行转换。如果它们是float,则表明序列中有一些nan,因此请先确定是否执行
    fillna()
    /
    dropna()
    操作。要获得标准化频率,您可以简化
    df[col]。value\u counts())/df.shape[0]
    df[col].value\u计数(normalize=True)
    谢谢。当我考虑这个问题时,根本不需要标准化。
    分位数将在没有标准化的情况下工作。标准化频率在自动化流程中可能很有用。这里OP已经知道他们只需要前10个最常见的级别。但一般来说,我们不知道。其次,它更高效、更简单、更短请列出最频繁的城市列表,我们知道它的长度仅为10,比我们不想要的990个频率较低的城市要长。@smc我不确定我是否理解你。
    频率较低的城市不可能是990个城市。如果有1000个独特的城市,它可以容纳约100个。你为什么建议容纳最频繁的城市?(也许我们最好转到聊天室)