在熊猫的分类变量上使用groupby删除未使用的类别

tal*_*les 5 python pandas

根据“ 分类数据-操作”,默认情况下groupby将显示“未使用”类别:

In [118]: cats = pd.Categorical(["a","b","b","b","c","c","c"], categories=["a","b","c","d"])

In [119]: df = pd.DataFrame({"cats":cats,"values":[1,2,2,2,3,4,5]})

In [120]: df.groupby("cats").mean()
Out[120]: 
      values
cats        
a        1.0
b        2.0
c        4.0
d        NaN
Run Code Online (Sandbox Code Playgroud)

如何删除“未使用”类别的结果?例如

  values
cats        
a        1.0
b        2.0
c        4.0
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 8

选项1
remove_unused_categories

df.groupby(df.cats.cat.remove_unused_categories()).mean()

      values
cats        
a          1
b          2
c          4
Run Code Online (Sandbox Code Playgroud)

您也可以先进行分配,然后groupby-

df.assign(cats=df.cats.cat.remove_unused_categories()).groupby('cats').mean()
Run Code Online (Sandbox Code Playgroud)

要么,

df['cats'] = df.cats.cat.remove_unused_categories()
df.groupby('cats').mean()
Run Code Online (Sandbox Code Playgroud)

      values
cats        
a          1
b          2
c          4
Run Code Online (Sandbox Code Playgroud)

选择2
astypestr转换-

df.groupby(df.cats.astype(str)).mean()

      values
cats        
a          1
b          2
c          4
Run Code Online (Sandbox Code Playgroud)


Die*_*now 5

从 0.23 版开始,您可以observed=Truegroupby调用中指定以实现所需的行为。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html