我有一个数据帧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做到这一点?
答案 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