计数的python数据透视表

Sym*_*ony 3 python pivot-table pandas

我有一个数据帧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    |
Run Code Online (Sandbox Code Playgroud)

我想创建一个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           |
Run Code Online (Sandbox Code Playgroud)

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

WeN*_*Ben 10

通过使用 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
Run Code Online (Sandbox Code Playgroud)


ede*_*esz 6

可以通过 Pandas 的基本pivot_table功能和聚合函数(也需要)以这种方式完成import NumPy。请参阅此问题和 Pandaspivot_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
Run Code Online (Sandbox Code Playgroud)