我有一个这样的数据框,
category target
A 1
B 1
A 0
A 0
A 0
B 0
C 1
C 1
我想计算每个类别中每个目标值的百分比。 例如,
的百分比'A'== 1是count(1)/(count(1)+count(0))
,
'A'== 0是count(0)/(count(1)+count(0))
如何获得这样的桌子
category 1 0
A 25% 75%
B 50% 50%
C 100% 0%
也许我应该使用一些分组功能?
答案 0 :(得分:3)
将crosstab
与参数normalize='index'
一起使用:
df = pd.crosstab(df['category'], df['target'], normalize='index').mul(100)
print (df)
target 0 1
category
A 75.0 25.0
B 50.0 50.0
C 0.0 100.0
或将SeriesGroupBy.value_counts
与Series.unstack
一起使用以进行整形:
df = df.groupby('category').target.value_counts(normalize=True).unstack(fill_value=0).mul(100)
print (df)
target 0 1
category
A 75.0 25.0
B 50.0 50.0
C 0.0 100.0