如何获取同一张表中不同类别的布尔值的比例
Posted
技术标签:
【中文标题】如何获取同一张表中不同类别的布尔值的比例【英文标题】:How to obtain proportion of a boolean value for different categories in the same table 【发布时间】:2019-09-27 22:31:24 【问题描述】:我是 python 新手,这是我正在学习的课程作业的一部分。我应该找到一个值 A 比例最高的组(有 10 多个组)(它是一个布尔值 - 仅限 A 或 B)。
我尝试找到每个组的值的总数以及每个组的 A 和 B 的计数。我希望我能写一个简单的除法公式来获得每个组的价值 A 的比例,但我被卡住了。事实上,我可能从一开始就没有采取正确的方法。
import numpy as np
import pandas as pd
Data = pd.read_csv('data.txt', header = None)
Data.head()
0 Group Value
1 1 A
2 1 A
3 1 B
4 3 A
5 3 B
6 2 A
7 2 B
8 2 A
9 2 A
10 4 B
Data.groupby('Group')['Value'].size()
# to get the total number of values applicable
Data.groupby(['Group', 'Value']).size()
# to get the count of rows for each Value (A and B only) for each Group (10+ groups)
如果我的解释不够清楚,请原谅我的解释。如果需要,我会尝试更好地解决问题。我希望学习如何获得每个组的 Value A 的百分比。
例如。
Group1 61% (or 0.61)
Group2 54%
Group3 49$ and so on...
请指教。
谢谢。
【问题讨论】:
你能提供一个输入数据的例子吗? 组(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15),值(A B) 我试图在 data.head(3) 中复制,但它看起来太乱了。这是否足够或有更好的方法在此评论块中显示数据示例? 你可以编辑你原来的问题,是的 我刚刚编辑了原始问题并添加了一个示例输入数据集。希望这会有所帮助...很抱歉,由于保密问题,我无法分享实际数据集。 【参考方案1】:这样的东西可以完成工作(我现在看起来不漂亮)
for group in [1,2,3,4]:
if 'A' in Data.loc[Data['Group'] == group].groupby(['Value']).count().index:
proportion = (Data.loc[Data['Group'] == group].groupby(['Value']).count()/
Data.loc[Data['Group'] == group].count()).loc['A','Group']
print('Group'+ str(group) + ' ' + str(proportion))
else:
print('Group'+ str(group) + ' ' + str(0))
Group1 0.6666666666666666
Group2 1.0
Group3 0.3333333333333333
Group4 0
【讨论】:
以上是关于如何获取同一张表中不同类别的布尔值的比例的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:如何为同一张表中的不同客户获取 3 天内的滚动总和