根据其他列中的值计算列中项目的出现次数 - Python

Count occurrence of items in column depending on value in other column - Python

我目前有一个 table 类似于这个:

 CRED | ACBA
  1   |  2 
  0   |  3 
  1   |  4 
  1   |  2 
  0   |  1 

等...

根据 CRED (1,0) 中的值,我能够获取有关 ACBA 列中类别 (1,2,3,4) 出现频率的信息:

pd.crosstab(df.CRED, df.ACBA)

ACBA   1   2  3   4
CRED               
  0    9  11  1   7
  1   18  22  4  28

现在我想将 ACBA 的值与特定的 CRED 值相加,然后将每个单个值除以该总和,并用结果创建一个新的 table。例如:

For CRED = 0  -->  9+11+1+7=28 then --> 9/28  11/28  1/28  7/28 to reach the final table:

         1     2     3     4

CRED0  0.25  0.30  0.055  0.38

有没有人知道如何做到这一点?我是 Python 的新手,完全坚持这一点。我的想法是,我将在其他 22 个 columns.Thanks

中重复此技术
a = {'CRED': [1,0,1,1,0], 'ACBA': [2,3,4,2,1]}
df = pd.DataFrame(a)

输出

   ACBA  CRED
0     2     1
1     3     0
2     4     1
3     2     1
4     1     0

那么就如你所用crosstab

   df1 = pd.crosstab(df.CRED, df.ACBA)
ACBA  1  2  3  4
CRED            
0     1  0  1  0
1     0  2  0  1

然后得到百分比

df1.apply(lambda a: a / a.sum() * 100, axis=1)

ACBA     1          2     3          4
CRED                                  
0     50.0   0.000000  50.0   0.000000
1      0.0  66.666667   0.0  33.333333