【问题标题】:Pandas Counting Unique Rows熊猫计算唯一行
【发布时间】:2016-07-01 08:09:08
【问题描述】:

我有一个类似于以下内容的 pandas 数据框:

ColA ColB
1    1
1    1
1    1
1    2
1    2
2    1
3    2

我想要一个与Counter 具有相同功能的输出。我需要知道每行出现了多少次(所有列都相同。

在这种情况下,正确的输出应该是:

ColA ColB Count
1    1    3
1    2    2
2    1    1
3    2    1

我已经尝试过类似的东西:

df.groupby(['ColA','ColB']).ColA.count()

但这给了我一些丑陋的输出,我无法格式化

【问题讨论】:

    标签: python python-2.7 pandas counter


    【解决方案1】:

    您可以将sizereset_index 一起使用:

    print df.groupby(['ColA','ColB']).size().reset_index(name='Count')
       ColA  ColB  Count
    0     1     1      3
    1     1     2      2
    2     2     1      1
    3     3     2      1
    

    【讨论】:

      【解决方案2】:

      我只需要计算唯一行数,并使用了DataFrame.drop_duplicates 替代方法,如下所示:

      len(df[['ColA', 'ColB']].drop_duplicates())
      

      我的数据速度是 len(df.groupby(['ColA', 'ColB'])) 的两倍。

      【讨论】:

        【解决方案3】:

        自 Pandas 1.1.0 起,pandas.DataFrame.value_counts 方法可用,这正是您所需要的。它创建了一个系列,其中唯一的行作为多索引,计数作为值:

        df = pd.DataFrame({'ColA': [1, 1, 1, 1, 1, 2, 3], 'ColB': [1, 1, 1, 2, 2, 1, 2]})
        pd.options.display.multi_sparse = False  # option to print as requested
        
        print(df.value_counts())                 # requires pandas >= 1.1.0
        

        输出,其中ColAColB 是多索引,第三列包含计数:

        ColA  ColB
        1     1       3
        1     2       2
        3     2       1
        2     1       1
        dtype: int64
        

        【讨论】:

          猜你喜欢
          • 2021-03-17
          • 1970-01-01
          • 1970-01-01
          • 2018-03-19
          • 2019-02-12
          • 2016-12-16
          • 1970-01-01
          • 1970-01-01
          • 2020-11-12
          相关资源
          最近更新 更多