我目前有一张与此类似的表格:
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个列中重复这种技术。谢谢
答案 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