本文介绍了对数据框进行排序并用百分比计算值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的DataFrame:
I have a DataFrame like this:
Kind Status
1 True
2 False
3 True
2 False
2 True
我用它计算了种类df.Kind.sort_values()
并得到了这个:
I counted the kinds with it df.Kind.sort_values()
and got this:
1 1
2 3
3 1
现在我想看看种类2中有多少是真或假.像这样:
Now I want to see how much of Kind 2 are true or false as number and percent. Like this:
Art True False
2 1 2
2 0.33 0.66
有人可以帮助我吗?最好的问候
Can someone help me? Best regards
推荐答案
crosstab + div
使用 pandas.crosstab
:
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
我认为,这是显示数据的最自然的方法.不建议在单个系列中将计数与百分比相结合.
In my opinion, this is the most natural way to display your data. Combining counts with percentages in a single series is not recommended.
或者,您可以加入几个crosstab
结果,一个归一化,另一个不归一.
Alternatively, you can join a couple of crosstab
results, one normalized, the other not.
res = pd.crosstab(df['Kind'], df['Status'])\
.join(pd.crosstab(df['Kind'], df['Status'], normalize='index'), rsuffix='_pct')
print(res)
Status False True False_pct True_pct
Kind
1 0 1 0.000000 1.000000
2 2 1 0.666667 0.333333
3 0 1 0.000000 1.000000
交叉表仅规范化
如果只寻找百分比,则可以使用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
这篇关于对数据框进行排序并用百分比计算值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!