Подсчитать количество истинных и ложных состояний в кадре данных искры - PullRequest
0 голосов
/ 25 ноября 2018

Я пришел из фона MATLAB, и я могу просто сделать это

age_sum_error = sum(age > prediction - 4 & age < prediction + 4);

Это будет подсчитывать количество age значений, для которых prediction (+4/-4) истинно, я хочу сделать что-топохоже на фрейм искровых данных.

Скажите, что ниже мой фрейм искровых данных

+--------------------------+
|age | gender | prediction |
+----+--------+------------+
|35  |  M     | 30         |
|40  |  F     | 42         |
|45  |  F     | 38         |
|26  |  F     | 29         |
+----+--------+------------+

Я хочу, чтобы мой результат выглядел примерно так

+------+----------+
|false | positive |
+------+----------+
|2     | 2        |
+------+----------+

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Сначала вычислите условие, а затем агрегируйте результат путем суммирования 1 s и 0 s :

df.selectExpr(
    'cast(abs(age - prediction) < 4 as int) as condition'
).selectExpr(
    'sum(condition) as positive', 
    'sum(1-condition) as negative'
).show()
+--------+--------+
|positive|negative|
+--------+--------+
|       2|       2|
+--------+--------+
0 голосов
/ 25 ноября 2018

Это намного больше кода, чем matlab, но вот как я бы это сделал.

import numpy as np

ages = [35, 40, 45, 26]
pred = [30, 42, 38, 29]
tolerance = 4

# get boolean array of people older and younger than limits
is_older = np.greater(ages, pred-tolerance) # a boolean array
is_younger =  np.less(ages, pred+tolerance) # a boolean array

# convert these boolean arrays to ints then multiply. True = 1, False = 0. 
in_range = is_older.astype(int)*is_younger.astype(int) # 0's cancel 1's

# add upp the indixes that are still 1
senior_count = np.sum(in_range)

Надеюсь, это поможет.

...