【问题标题】:python pivot table of countspython 数据透视表
【发布时间】:2017-11-16 02:28:08
【问题描述】:

我有一个数据框 df 如下:

| id | movie | value |
|----|-------|-------|
| 1  | a     | 0     |
| 2  | a     | 0     |
| 3  | a     | 20    |
| 4  | a     | 0     |
| 5  | a     | 10    |
| 6  | a     | 0     |
| 7  | a     | 20    |
| 8  | b     | 0     |
| 9  | b     | 0     |
| 10 | b     | 30    |
| 11 | b     | 30    |
| 12 | b     | 30    |
| 13 | b     | 10    |
| 14 | c     | 40    |
| 15 | c     | 40    |

我想创建一个 2X2 数据透视表,如下所示:

| Value | count(a) | count(b) | count ( C ) |
|-------|----------|----------|-------------|
| 0     | 4        | 2        | 0           |
| 10    | 1        | 1        | 0           |
| 20    | 2        | 0        | 0           |
| 30    | 0        | 3        | 0           |
| 40    | 0        | 0        | 2           |

我可以在 Excel 中使用行标签和列标签非常轻松地做到这一点。如何使用 Python 做到这一点?

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    通过使用pd.crosstab

    pd.crosstab(df['value'],df['movie'])
    Out[24]: 
    movie          a        b        c     
    value                            
    0              4        2        0
    10             1        1        0
    20             2        0        0
    30             0        3        0
    40             0        0        2
    

    【讨论】:

      【解决方案2】:

      使用 Pandas 的基本pivot_table 功能和聚合函数(也需要import NumPy)可以做到这一点。请参阅 this question 和 Pandas pivot_table 文档中的答案以及示例:

      import numpy as np
      df = ...
      ndf = df.pivot_table(index=['value'],
                           columns='movie',
                           aggfunc=np.count_nonzero).reset_index().fillna(0).astype(int)
      print(ndf)
      
            value id      
      movie        a  b  c
      0         0  4  2  0
      1        10  1  1  0
      2        20  2  0  0
      3        30  0  3  0
      4        40  0  0  2
      

      【讨论】:

        【解决方案3】:

        既然你熟悉 Excel 中的数据透视表,我也会给你 Pandas pivot_table 方法:

        df.pivot_table('id','value','movie',aggfunc='count').fillna(0).astype(int)
        

        输出:

        movie     a        b        c     
        value                             
         0             4        2        0
         10            1        1        0
         20            2        0        0
         30            0        3        0
         40            0        0        2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-17
          相关资源
          最近更新 更多