计数的python数据透视表

时间:2017-11-16 02:28:09

标签: python pandas pivot-table

我有一个数据帧df,如下所示:

| 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           |

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

{{1}}

我可以使用行和列标签在Excel中轻松完成此操作。我怎么能用Python做到这一点?

3 个答案:

答案 0 :(得分:6)

使用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

答案 1 :(得分:3)

可以通过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

答案 2 :(得分:1)

由于您熟悉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