Данные бина в диапазонах - PullRequest
0 голосов
/ 29 мая 2018

У меня есть датафрейм, как показано ниже, и я хочу создать 4 столбца для вычисления распределения точности

Company Error_Rate
A       9
B      10
c      20
GK     17
GK     18
GK     30
GK     35
GK     25
GK     32
GK     40
GK     50
MB     60
MB     70
MB     70

И я хочу иметь такую ​​таблицу

Company Error_Rate  Above 90%   80% - 90%   65% - 80%   Below 65%
A              9    1           0           0           0
B             10    1           0           0           0
c             20    0           1           0           0
GK            17    0           1           0           0
GK            18    0           1           0           0
GK            30    0           0           1           0
GK            35    0           0           1           0
GK            40    0           0           0           1

Я пытался

df['Above 90%'] = np.where(df['Error_Rate']<=10,1,0)
df['80% - 90%'] = np.where(df['Error_Rate'] <= 20,(np.where(df['Error_Rate'] > 10, 1, 0)),0)
df['65% - 80%'] = np.where(df['Error_Rate'] <= 35,(np.where(df['Error_Rate'] > 20, 1, 0)),0)
df['Below 65%'] = np.where(df['Error_Rate']>35,1,0)

Это не дает мне желаемого результата.Я что-то не так делаю?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Использование:

df['Above 90%'] = np.where(df['Error_Rate']<=10,1,0)
df['80% - 90%'] = np.where((df['Error_Rate'] <= 20) & (df['Error_Rate'] > 10),1,0)
df['65% - 80%'] = np.where((df['Error_Rate'] <= 35) & (df['Error_Rate'] > 20),1,0)
df['Below 65%'] = np.where(df['Error_Rate']>35,1,0)

print (df)
   Company  Error_Rate  Above 90%  80% - 90%  65% - 80%  Below 65%
0        A           9          1          0          0          0
1        B          10          1          0          0          0
2        c          20          0          1          0          0
3       GK          17          0          1          0          0
4       GK          18          0          1          0          0
5       GK          30          0          0          1          0
6       GK          35          0          0          1          0
7       GK          25          0          0          1          0
8       GK          32          0          0          1          0
9       GK          40          0          0          0          1
10      GK          50          0          0          0          1
11      MB          60          0          0          0          1
12      MB          70          0          0          0          1
13      MB          70          0          0          0          1
0 голосов
/ 29 мая 2018

Если вам нужно написать 4 np.where условия для вычисления столбца, вы делаете это неправильно.Я думаю, что было бы разумно рассмотреть другой подход.

Один краткий вариант включает pd.cut + pd.get_dummies.

bins = [0, 65, 80, 90, 100]
labels = ['Below 65%', '65% - 80%', '80% - 90%', 'Above 90%']

pd.concat([
    df, pd.get_dummies(pd.cut(100 - df.Error_Rate, bins=bins, labels=labels, right=True))
   ], axis=1
)

   Company  Error_Rate  Below 65%  65% - 80%  80% - 90%  Above 90%
0        A           9          0          0          0          1
1        B          10          0          0          0          1
2        c          20          0          0          1          0
3       GK          17          0          0          1          0
4       GK          18          0          0          1          0
5       GK          30          0          1          0          0
6       GK          35          0          1          0          0
7       GK          25          0          1          0          0
8       GK          32          0          1          0          0
9       GK          40          1          0          0          0
10      GK          50          1          0          0          0
11      MB          60          1          0          0          0
12      MB          70          1          0          0          0
13      MB          70          1          0          0          0
...