【问题标题】:How do I create the counts of the column values, grouped by values in the other column in Pandas?如何创建列值的计数,按 Pandas 中另一列中的值分组?
【发布时间】:2017-07-27 21:29:44
【问题描述】:

我有一个具有值的数据框 df:

ID    Status
1       A
2       B
5       A
1       A
3       B
4       B
5       B

我需要按列状态对列 ID 进行分组。问题是 ID 可以有重复,可以有相同或不同的代码。

我的代码是:

df_new = df.groupby('ID').Status.nunique()

但是,我将 ID 分组,但没有显示“状态”列及其值。我需要创建一个如下所示的数据集:

Status  Count
  A      3
  B      4

【问题讨论】:

    标签: python pandas group-by unique


    【解决方案1】:

    你需要groupbycount

    df.groupby('Status')['Status'].count()
    

    输出:

    Status
    A    3
    B    4
    Name: Status, dtype: int64
    

    【讨论】:

    • 为什么不df.Status.value_counts()
    • 我开车回家时也想到了这一点。我打算编辑这个答案。谢谢约翰的建议。
    【解决方案2】:

    我不知道 Pandas,但我知道 SQL,而且你所做的基本概念是相同的。首先,您需要使用计数功能聚合您的数据。然后您可以按该状态列分组。

    另外,请参阅类似的 SO 答案:

    如果链接消失,请在此处粘贴答案要点:

    df = pd.DataFrame({'a':list('abssbab')})
    df.groupby('a').count()
    

    【讨论】:

      【解决方案3】:

      对于您希望创建的输出,变量 Status 上的 value_counts 方法就足够了。

      import pandas as pd
      df = pd.DataFrame(['A','B','A','A','B','B','B'])
      df.columns=['Status']
      df.Status.value_counts()
      

      【讨论】:

        【解决方案4】:

        我认为DataFrame 需要value_countsrename_axisreset_index

        df = df['Status'].value_counts().rename_axis('Status').reset_index(name='Count')
        print (df)
          Status  Count
        0      B      4
        1      A      3
        

        或者通过GroupBy.size聚合:

        df = df.groupby('Status').size().reset_index(name='Count')
        print (df)
          Status  Count
        0      A      3
        1      B      4
        

        编辑:

        但如果想按ID 列获取大小,则不需要另一列:

        df1 = df.groupby('ID')['Status'].size().reset_index(name='Count')
        print (df1)
           ID  Count
        0   1      2
        1   2      1
        2   3      1
        3   4      1
        4   5      2
        
        df2 = df.groupby('ID')['ID'].size().reset_index(name='Count')
        print (df2)
           ID  Count
        0   1      2
        1   2      1
        2   3      1
        3   4      1
        4   5      2
        
        df3 = df.groupby('ID').size().reset_index(name='Count')
        print (df3)
           ID  Count
        0   1      2
        1   2      1
        2   3      1
        3   4      1
        4   5      2
        

        但可以使用:

        df4 = df.groupby('ID')['Status'].value_counts().reset_index(name='Count')
        print (df4)
           ID Status  Count
        0   1      A      2
        1   2      B      1
        2   3      B      1
        3   4      B      1
        4   5      A      1
        5   5      B      1
        

        什么是相同的:

        df4 = df.groupby(['ID', 'Status']).size().reset_index(name='Count')
        print (df4)
           ID Status  Count
        0   1      A      2
        1   2      B      1
        2   3      B      1
        3   4      B      1
        4   5      A      1
        5   5      B      1
        

        What is the difference between size and count in pandas?

        【讨论】:

          猜你喜欢
          • 2022-11-23
          • 1970-01-01
          • 1970-01-01
          • 2021-10-30
          • 2017-09-12
          • 2021-06-07
          • 1970-01-01
          • 2022-06-13
          • 2020-04-16
          相关资源
          最近更新 更多