如何在Pandas中对分类值进行分组?

我正在尝试转换为分类值并在熊猫中分组.

例如,我尝试了以下内容

import pandas as pd

df = pd.DataFrame()
df['A'] = ['C1','C1','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)

不幸的是,我得到了例外

File “C:\python34\lib\site-packages\pandas\core\internals.py”,line 86,in init
len(self.values),len(self.mgr_locs)))

ValueError: Wrong number of items passed 2,placement implies 3

编辑
不幸的是,@ jois提出的解决方法对我的应用程序不起作用.新的反例:

import pandas as pd

df = pd.DataFrame()
df['A'] = ['C1',pd.np.nan,'A'].astype('category')

df2 = df[0:4]

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

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

print(result)

解决方法

正如评论中所提到的,这是大熊猫0.17.0的回归,并在此报道: https://github.com/pydata/pandas/issues/11635

作为现在的解决方法,您可以通过apply轻松使用nunique Series方法,而不是直接在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

你遇到的另一个问题是remove_unused_categories()也是一个bug,这将在0.17.1(https://github.com/pydata/pandas/pull/11639)中修复

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...