计算布尔列的百分比

Posted

技术标签:

【中文标题】计算布尔列的百分比【英文标题】:Calculate percentage on boolean column 【发布时间】:2018-02-03 00:55:01 【问题描述】:

假设我的数据具有以下结构:

Year      | Location | New_client 

2018      | Paris    | true
2018      | Paris    | true
2018      | Paris    | false
2018      | London   | true
2018      | Madrid   | true
2018      | Madrid   | false
2017      | Paris    | true

我正在尝试计算 New_client 的每一年和位置的真实值百分比,因此从结构示例中获取记录的示例是

2018     | Paris    | 66
2018     | London   | 100
2018     | Madrid   | 50
2017     | Paris    | 100

改编自 https://***.com/a/13484279/2802552 我当前的脚本是,但不同之处在于它使用 2 列(年份和位置)而不是 1 列

data = load...
grp = group inpt by Year; -- creates bags for each value in col1 (Year)
result = FOREACH grp 
    total = COUNT(data);
    t = FILTER data BY New_client == 'true'; --create a bag which contains only T values
    GENERATE FLATTEN(group) AS Year, total AS TOTAL_ROWS_IN_INPUT_TABLE, 100*(double)COUNT(t)/(double)total AS PERCENTAGE_TRUE_IN_INPUT_TABLE;
;

问题是这使用年份作为参考,而我需要它是年份和地区。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您需要同时按YearLocation 进行分组,这需要进行两次修改。首先,将Location 添加到group by 语句中。其次,将FLATTEN(group) AS Year 更改为FLATTEN(group) AS (Year, Location),因为group 现在是一个包含两个字段的元组。

grp = group inpt by (Year, Location);
result = FOREACH grp 
    total = COUNT(inpt);
    t = FILTER inpt BY New_client == 'true';
    GENERATE 
        FLATTEN(group) AS (Year, Location), 
        total AS TOTAL_ROWS_IN_INPUT_TABLE, 
        100*(double)COUNT(t)/(double)total AS PERCENTAGE_TRUE_IN_INPUT_TABLE;
;

【讨论】:

【参考方案2】:

测试了这段代码,看起来对我有用:

A = LOAD ...
B = GROUP A BY (year, location);
C = FOREACH B  
    TRUE_CNT = FILTER A BY (chararray)new_client == 'true';
    GENERATE group.year, group.location, (int)((float)COUNT(TRUE_CNT) / COUNT(A) * 100);


DUMP C;
(2017,Paris,100)
(2018,Paris,66)
(2018,London,100)
(2018,Madrid,50)

【讨论】:

以上是关于计算布尔列的百分比的主要内容,如果未能解决你的问题,请参考以下文章

用于计算同一列的值百分比的 SQL [关闭]

使用条件 groupby 计算分类列的百分比并在 Python 中计数

pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)

pandas使用pct_change计算数据列的百分比变化环比变化率:计算当前元素和前一个元素之间的百分比变化使用style函数指定format的格式:百分比缺失值替换用颜色标注极大值和极小值

如何计算列的每个值所在的百分位数? (Spark SQL)[重复]

计算数据集列的百分位数