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 isOut[11]:“0.16.2”
并运行良好时发生错误这似乎是熊猫0.17.0中的回归,此处报告: