如何获取同一张表中不同类别的布尔值的比例

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 天内的滚动总和

如何获取列中每个不同值的计数? [复制]

如何通过多对多关系获取与同一张表相关的行 - Laravel

如何在sql中将同一张表中的两个值连接起来?

如何比较同一张表(SQL Server)中的 2 行?