【问题标题】:Groupby nunique versus unique with categorical dataGroupby nunique 与独特的分类数据
【发布时间】: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


【解决方案1】:

这是 ~0.17 版本中的 known bug,已在 ~0.21+ 中修复。

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多