【问题标题】:Pandas: How to groupby and get a count of uniques in a given column?Pandas:如何分组并获取给定列中的唯一性计数?
【发布时间】:2016-01-14 18:19:40
【问题描述】:

我有一个包含三列的 DataFrame:

id     order     ordernumber  
1      app         1
1      pip         2
1      org         3
2      app         1
3      app         1
3      org         3

“订单”列只有 3 个唯一值(app、pip 和 org)。我想得到一个 DataFrame,它显示每个 id 有多少订单,以及他们的总订单数。

结果如下所示:

id     app        pip    org    total
1      1           1      1      3
2      1           0      0      1
3      1           0      1      2

【问题讨论】:

    标签: python pandas dataframe pivot-table


    【解决方案1】:

    您可以使用pivot_table 获取计数:

    >>> df2 = df.pivot_table(index='id', columns='order', aggfunc='size', fill_value=0)
    >>> df2
    order  app  org  pip
    id
    1        1    1    1
    2        1    0    0
    3        1    1    0
    

    然后您可以通过对每一行求和来添加“总计”列:

    >>> df2['total'] = df2.sum(axis=1)
    >>> df2
    order  app  org  pip  total
    id
    1        1    1    1      3
    2        1    0    0      1
    3        1    1    0      2
    

    【讨论】:

      【解决方案2】:

      ajcr 的替代品:

      df2 = df.pivot_table(index='id', columns='order', aggfunc=lambda x: len(x.unique()), margins=True)
      

      使用不同的aggfunc 来计算唯一性。

      In [4]: df2 = df.pivot_table(index='id', columns='order', aggfunc=lambda x: len(x.unique()), margins=True)
      
      In [5]: df2
      Out[5]:
            ordernum
      order      app org pip All
      id
      1            1   1   1   3
      2            1 NaN NaN   1
      3            1   1 NaN   2
      All          1   1   1   3
      

      您还可以使用margins 参数自动获取pivot_table 函数的列/行小计。

      如果您之后需要替换NaN,您可以使用: df2.fillna(0, inplace=True)

      In [6]: df2.fillna(0, inplace=True)
      
      In [7]: df2
      Out[7]:
            ordernum
      order      app org pip All
      id
      1            1   1   1   3
      2            1   0   0   1
      3            1   1   0   2
      All          1   1   1   3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2018-03-26
        • 1970-01-01
        • 2021-01-16
        相关资源
        最近更新 更多