【问题标题】:How to groupby count across multiple columns in pandas如何在熊猫的多列中分组计数
【发布时间】:2016-10-21 00:45:27
【问题描述】:

我在 Python pandas 中有以下示例数据框:

+---+------+------+------+
|   | col1 | col2 | col3 |
+---+------+------+------+
| 0 |   a  |   d  |   b  |
+---+------+------+------+
| 1 |   a  |   c  |   b  |
+---+------+------+------+
| 2 |   c  |   b  |   c  |
+---+------+------+------+
| 3 |   b  |   b  |   c  |
+---+------+------+------+
| 4 |   a  |   a  |   d  |
+---+------+------+------+

我想对第 1-3 列中的所有“a”、“b”、“c”和“d”值进行计数,以便最终得到如下数据框:

+---+--------+-------+
|   | letter | count |
+---+--------+-------+
| 0 |    a   |   4   |
+---+--------+-------+
| 1 |    b   |   5   |
+---+--------+-------+
| 2 |    c   |   4   |
+---+--------+-------+
| 3 |    d   |   2   |
+---+--------+-------+

我可以做到这一点的一种方法是将列堆叠在一起,然后进行分组计数,但我觉得必须有更好的方法。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: python pandas dataframe counter data-analysis


    【解决方案1】:

    你可以applyvalue_countssum:

    print (df.apply(pd.value_counts))
       col1  col2  col3
    a   3.0     1   NaN
    b   1.0     2   2.0
    c   1.0     1   2.0
    d   NaN     1   1.0
    
    df1 = df.apply(pd.value_counts).sum(1).reset_index()
    df1.columns = ['letter','count']
    df1['count'] = df1['count'].astype(int)
    print (df1)
      letter  count
    0      a      4
    1      b      5
    2      c      4
    3      d      2
    

    【讨论】:

      【解决方案2】:

      您可以stack() 数据框将所有列放入行中,然后执行value_counts

      df.stack().value_counts()
      
      b    5
      c    4
      a    4
      d    2
      dtype: int64
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-24
        • 2018-04-29
        • 2017-03-21
        相关资源
        最近更新 更多