假设我有一个数据框:
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
有人能让我走上正轨吗?
答案 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