如何使用pandas交叉表进行交叉制表,以显示列变量的多个值的频率?

时间:2016-11-22 21:27:21

标签: python pandas crosstab

假设我有一个数据框:

df = pd.DataFrame(np.random.randint(0,5, size=(5,6)), columns=list('ABCDEF'))

使用pd.crosstab交叉变量非常简单:

table = pd.crosstab(index=df['A'], columns=df['B'])

收率:

B  1  2  3  4
A            
0  1  0  0  0
1  0  0  0  1
2  0  1  1  0
3  0  1  0  0

我想要一个像这样的表:

B  (1+2+3) 1  2  3  4
A            
0     1    1  0  0  0
1     0    0  0  0  1
2     2    0  1  1  0
3     1    0  1  0  0

有人能让我走上正轨吗?

1 个答案:

答案 0 :(得分:2)

sum与子集一起使用,但如果使用小的随机df,则可能会出现问题,因此总会得到另一个值,因此列的值将不同。如果使用np.random.seed(100)获得与我的答案相同的测试输出。

table['(1+2+3)'] = table[[1,2,3]].sum(axis=1)

样品:

np.random.seed(100)
df = pd.DataFrame(np.random.randint(0,5, size=(5,6)), columns=list('ABCDEF'))
table = pd.crosstab(index=df['A'], columns=df['B'])
table['(1+2+3)'] = table[[1,2,3]].sum(axis=1)
print (table)
B  0  1  2  3  4  (1+2+3)
A                        
0  1  0  0  0  1        0
1  0  0  0  1  0        1
2  0  0  1  0  0        1
3  0  1  0  0  0        1