【发布时间】:2018-12-24 08:27:45
【问题描述】:
我有一个数据框,并在通过掩码过滤后使用unique 执行groupby。我的石斑鱼系列是分类的。我正在使用 Python 3.6.0 / Pandas 0.19.2。
df1 = pd.DataFrame({'sku': ['A0', 'A0', 'A2', 'A2', 'A3', 'A3'],
'ID': ['10', 'T1', 'T1', 'T2', '10', '20']})
df1['sku'] = df1['sku'].astype('category')
res = df1[df1['ID'].str[0] == 'T'].groupby('sku')['ID'].unique()
sku
A0 [T1]
A2 [T1, T2]
A3 []
Name: ID, dtype: object
这按预期工作。现在有了nunique,我期待[1, 2, 0]。
但我看到的是[1, 1, 0]:
res = df1[df1['ID'].str[0] == 'T'].groupby('sku')['ID'].nunique()
sku
A0 1
A2 1
A3 0
Name: ID, dtype: int64
如果我省略转换为分类,结果如预期:
res = df1[df1['ID'].str[0] == 'T'].groupby('sku')['ID'].nunique()
sku
A0 1
A2 2
Name: ID, dtype: int64
为什么根据分组器是否分类结果不同?
【问题讨论】:
-
res = df1[df1['ID'].str[0] == 'T'].groupby('sku')['ID'].apply(lambda x: x.nunique())的输出是什么? -
@user3483203,无论是否转换为分类都有效。但是
lambda并不理想,仍然有点困惑:S -
如果修复它,那么它似乎是 0.17 遗留的一个错误的残余,当并非所有类别都存在时,它涉及分类数据上的
nunique。似乎已从 0.21 开始修复 -
我无法重现您的问题,但是我正在运行 pandas 0.23.1,所以也许它已在更新的版本中得到修复?
-
In [8]: pd.__version__ Out[8]: '0.19.2'。这是this 错误。
标签: python pandas dataframe count pandas-groupby