Python 如何对熊猫的分类值进行分组?

Python 如何对熊猫的分类值进行分组?,python,pandas,grouping,categorical-data,Python,Pandas,Grouping,Categorical Data,我正在尝试转换为熊猫中的分类值和分组 例如,我尝试了以下方法: import pandas as pd df = pd.DataFrame() df['A'] = ['C1', 'C1', 'C2', 'C2', 'C3', 'C3'] df['B'] = [1,2,3,4,5,6] df['A'] = df.loc[:,'A'].astype('category') df2 = df[0:3] result = df2.groupby(by='A')['B'].nunique() p

我正在尝试转换为熊猫中的分类值和分组

例如,我尝试了以下方法:

import pandas as pd

df = pd.DataFrame()
df['A'] = ['C1', 'C1', 'C2', 'C2', 'C3', 'C3']
df['B'] = [1,2,3,4,5,6]

df['A'] = df.loc[:,'A'].astype('category')

df2 = df[0:3]

result = df2.groupby(by='A')['B'].nunique()

print(result)
不幸的是,我得到了例外

文件“C:\Python34\lib\site packages\pandas\core\internals.py”,第86行,在init len(自我价值观),len(自我管理者)

ValueError:传递的项目数错误2,放置意味着3

编辑 不幸的是,@joris建议的解决方法不适用于我的应用程序。新的反例:

import pandas as pd

df = pd.DataFrame()
df['A'] = ['C1', 'C1', 'C2', pd.np.nan, 'C3', 'C3']
df['B'] = [1,2,3,4,5,6]

df['A'] = df.loc[:,'A'].astype('category')

df2 = df[0:4]

df2['A'] = df2['A'].cat.remove_unused_categories()

result = df2.groupby(by='A')['B'].nunique()

print(result)

如评论中所述,这是pandas 0.17.0中的回归,报告如下:

作为目前的解决办法,您可以通过
apply
轻松使用
nunique
系列方法,而不是直接在groupby对象上调用它:

In [22]: df2.groupby(by='A')['B'].apply(lambda x: x.nunique())
Out[22]:
A
C1    2
C2    1
C3    0
Name: B, dtype: int64

您在
删除未使用的\u类别()
中遇到的另一个问题也是一个bug,这将在0.17.1()中修复。

我尝试过它,但效果很好,我知道您使用的是什么版本的pandas?pandas 17.0。您使用的是什么版本?熊猫0.17.0有相同的错误。。。调用
nunique()
Mine is
Out[11]:“0.16.2”
并运行良好时发生错误这似乎是熊猫0.17.0中的回归,此处报告: