2024-05-14 19:28:36 发布
网友
我有这样一个数据帧:
Kind Status 1 True 2 False 3 True 2 False 2 True
我用它数了一下种类df.Kind.sort_values() 得到了这个:
df.Kind.sort_values()
现在我想看看第2类的数字和百分比有多少是真是假。像这样:
Art True False 2 1 2 2 0.33 0.66
有人能帮我吗? 谨致问候
使用^{}:
res = pd.crosstab(df['Kind'], df['Status']) res[['Pct False', 'Pct True']] = res.div(res.sum(axis=1), axis=0) print(res) Status False True Pct False Pct True Kind 1 0 1 0.000000 1.000000 2 2 1 0.666667 0.333333 3 0 1 0.000000 1.000000
在我看来,这是最自然的方式来显示你的数据。不建议将单个百分比与单个计数组合。在
或者,您可以加入两个crosstab结果,一个是标准化的,另一个不是。在
crosstab
如果只查找百分比,则可以使用normalize参数:
normalize
res = pd.crosstab(df['Kind'], df['Status'], normalize='index') print(res) Status False True Kind 1 0.000000 1.000000 2 0.666667 0.333333 3 0.000000 1.000000
将^{}与^{}和{a3}一起用于counts的枢轴:
count
df1 = df.groupby(['Kind','Status']).size().unstack(fill_value=0) #alternative solution, slowier in large data #df1 = pd.crosstab(df['Kind'], df['Status']) print (df1) Status False True Kind 1 0 1 2 2 1 3 0 1
然后除以sum并附加到原始值:
sum
print (df.loc[2]) Status False True Kind 2 2.000000 1.000000 2 0.666667 0.333333
但是,如果希望避免将integers转换为floats,请将append更改为{},并为唯一列添加^{}:
integer
float
append
df = df1.join(df1.div(df1.sum(axis=1), axis=0).add_prefix('pct ')) print (df) Status False True pct False pct True Kind 1 0 1 0.000000 1.000000 2 2 1 0.666667 0.333333 3 0 1 0.000000 1.000000 print (df.loc[[2]]) Status False True pct False pct True Kind 2 2 1 0.666667 0.333333
您可以简单地使用:
g = df.loc[df['Kind']==2].groupby(['Kind', 'Status']).size().unstack() pd.concat([g,g.apply(lambda x: round(x / (x[False]+x[True]), 2), axis=1)])
输出:
交叉表+div
使用^{} :
在我看来,这是最自然的方式来显示你的数据。不建议将单个百分比与单个计数组合。在
交叉表+交叉表规范化
或者,您可以加入两个
^{pr2}$crosstab
结果,一个是标准化的,另一个不是。在交叉表仅规格化
如果只查找百分比,则可以使用
normalize
参数:将^{} 与^{} 和{a3}一起用于
count
s的枢轴:然后除以
^{pr2}$sum
并附加到原始值:但是,如果希望避免将},并为唯一列添加^{} :
integer
s转换为float
s,请将append
更改为{您可以简单地使用:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐