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

时间:2017-08-11 17:19:17

标签: python dataframe iteration frequency

我目前有一张与此类似的表格:

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

等...

我能够获得有关ACBA列中类别(1,2,3,4)出现频率的信息,具体取决于CRED(1,0)中的值,使用:

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

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

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

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个列中重复这种技术。谢谢

1 个答案:

答案 0 :(得分:0)

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