【问题标题】:groupby count same values in two columns in pandas?groupby 在熊猫的两列中计算相同的值?
【发布时间】:2019-12-31 16:33:02
【问题描述】:

我有以下 Pandas 数据框:

name1   name2
A       B
A       A
A       C
A       A
B       B
B       A

我想添加一个名为 new 的列,该列计数 name1 OR name2 保留合并的列(name1name2 中的不同值)。因此,预期的输出是以下数据帧:

name   new
   A     7
   B     4
   C     1

我试过了

df.groupby(["name1"]).count().groupby(["name2"]).count(),除此之外……虽然最后一个似乎给了我正确的结果,但我无法获得连接的数据集。

【问题讨论】:

标签: python pandas


【解决方案1】:

您可以将value_countsdf.stack() 一起使用:

df[['name1','name2']].stack().value_counts()
#df.stack().value_counts() for all cols

A    7
B    4
C    1

具体来说:

(df[['name1','name2']].stack().value_counts().
      to_frame('new').rename_axis('name').reset_index())

  name  new
0    A    7
1    B    4
2    C    1

【讨论】:

    【解决方案2】:

    让我们试试melt

    df.melt().value.value_counts()
    Out[17]: 
    A    7
    B    4
    C    1
    Name: value, dtype: int64
    

    【讨论】:

    • 谢谢!这是正确的,但它适用于 any 列。换句话说,它也会计算第三个name3 列中的项目。太棒了!我会保存它以供更多用户使用。
    【解决方案3】:

    或者,

    df.name1.value_counts().add(df.name2.value_counts(), fill_value=0).astype(int)  
    

    给你

    A    7
    B    4
    C    1
    dtype: int64
    

    【讨论】:

      【解决方案4】:

      Series.appendSeries.value_counts 一起使用:

      df['name1'].append(df['name2']).value_counts()
      
      A    7
      B    4
      C    1
      dtype: int64
      

      value_counts 将聚合列转换为索引。要获得所需的输出,请使用 rename_axisreset_index

      df['name1'].append(df['name2']).value_counts().rename_axis('name').reset_index(name='new')
      
        name  new
      0    A    7
      1    B    4
      2    C    1
      

      【讨论】:

        【解决方案5】:

        python Counter 是另一种解决方案

        from collections import Counter
        
        s = pd.Series(Counter(df.to_numpy().flatten()))
        
        In [1325]: s
        Out[1325]:
        A    7
        B    4
        C    1
        dtype: int64
        

        【讨论】:

        • @ignoring_gravity:呵呵……这就是 python 和 pandas 的美妙之处:)
        猜你喜欢
        • 1970-01-01
        • 2020-04-18
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 1970-01-01
        • 2021-02-27
        • 2021-10-24
        相关资源
        最近更新 更多