2016-11-22 57 views
2

比方说,我有一个数据帧:如何使用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

有要具有良好的答案。但是,我正在努力理解什么是想要的。简化您的示例并向我们展示您期望看到的内容。这意味着你应该手动计算你的自我,这样我们可以看到你的逻辑。 – piRSquared

+0

我已更新我的问题,希望现在有意义。 – pasitrauk

回答

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

谢谢,正是我在找的! – pasitrauk