I am trying to iterate through columns and check to see if at any point there exists a value of -1, 0, 1, or 2. I want to then create a new column with booleans as values. True
for values greater than or equal to 1 and False
for values that equal to -1. This will happen for every row in my dataset.
Column A | Column B | Boosted |
---|---|---|
1 | -1 | True |
0 | -1 | False |
-1 | 1 | True |
Here are the rules:
True
False
NaN
Below is the code that I currently have, and it's result. I know I can run multiple conditional statements, but I think that would be too much for later when more and more columns are added.
for i in range(handicap_test_cols.shape[1]):
handicap_test_cols.loc[handicap_test_cols[handicap_test_cols.columns[i]] >= 1, 'boost_prev'] = True
handicap_test_cols.loc[handicap_test_cols[handicap_test_cols.columns[i]] <1, 'boost_prev'] = False
print(handicap_test_cols)
wk_handicap0 wk_handicap1 boost_prev
0 1.0 0.0 False
1 1.0 0.0 False
2 1.0 0.0 False
3 1.0 0.0 False
4 1.0 0.0 False
5 1.0 0.0 False
6 0.0 0.0 False
7 0.0 0.0 False
8 0.0 0.0 False
9 1.0 -1.0 False
10 1.0 0.0 False
11 1.0 -1.0 False
12 1.0 0.0 False
13 0.0 0.0 False
14 0.0 0.0 False
15 0.0 0.0 False
16 1.0 -1.0 False
17 0.0 0.0 False
18 1.0 -1.0 False
19 0.0 -1.0 False
20 0.0 -1.0 False
21 0.0 -1.0 False
22 1.0 -1.0 False
23 1.0 -1.0 False
24 0.0 -1.0 False
25 1.0 -1.0 False
26 0.0 -1.0 False
27 0.0 -1.0 False
28 0.0 -1.0 False
29 0.0 -1.0 False
30 1.0 -1.0 False
31 0.0 -1.0 False
32 1.0 -1.0 False
33 1.0 -1.0 False
34 0.0 -1.0 False
35 0.0 -1.0 False
36 0.0 -1.0 False
37 1.0 -1.0 False
38 0.0 -1.0 False
39 0.0 -1.0 False
40 0.0 -1.0 False
41 0.0 -1.0 False
42 0.0 -1.0 False
43 0.0 -1.0 False
44 0.0 -1.0 False
45 0.0 -1.0 False
46 0.0 -1.0 False
47 0.0 -1.0 False
48 0.0 -1.0 False
49 0.0 -1.0 False
50 0.0 -1.0 False
51 0.0 -1.0 False
52 0.0 -1.0 False
53 0.0 -1.0 False
54 0.0 -1.0 False
55 0.0 -1.0 False
56 0.0 -1.0 False
57 0.0 -1.0 False
58 -1.0 -1.0 False
59 1.0 -1.0 False
60 -1.0 -1.0 False
61 0.0 -1.0 False
62 0.0 -1.0 False
63 0.0 -1.0 False
64 0.0 -1.0 False
65 -1.0 -1.0 False
66 0.0 -1.0 False
67 0.0 -1.0 False
68 1.0 -1.0 False
69 0.0 -1.0 False
70 -1.0 -1.0 False
71 -1.0 -1.0 False
72 0.0 -1.0 False
73 -1.0 -1.0 False
74 1.0 -1.0 False
75 -1.0 -1.0 False
76 0.0 -1.0 False
77 0.0 -1.0 False
78 -1.0 -1.0 False
79 0.0 -1.0 False
80 1.0 -1.0 False
81 1.0 -1.0 False
82 0.0 -1.0 False
83 1.0 -1.0 False
84 0.0 -1.0 False
85 0.0 -1.0 False
86 -1.0 -1.0 False
87 0.0 -1.0 False
88 -1.0 -1.0 False
89 -1.0 -1.0 False
90 0.0 -1.0 False
91 0.0 -1.0 False
92 -1.0 -1.0 False
93 0.0 -1.0 False
94 1.0 -1.0 False
95 0.0 -1.0 False
96 0.0 -1.0 False
97 0.0 -1.0 False
98 0.0 -1.0 False
99 0.0 -1.0 False
100 0.0 -1.0 False
101 0.0 -1.0 False
102 0.0 -1.0 False
103 -1.0 -1.0 False
104 0.0 -1.0 False
105 -1.0 -1.0 False
106 -1.0 -1.0 False
107 1.0 0.0 False
108 0.0 -1.0 False
109 -1.0 -1.0 False
110 -1.0 -1.0 False
111 1.0 0.0 False
112 -1.0 -1.0 False
113 -1.0 -1.0 False
114 -1.0 -1.0 False
115 0.0 0.0 False
116 0.0 0.0 False
117 0.0 0.0 False
118 0.0 0.0 False
119 -1.0 -1.0 False
120 0.0 0.0 False
121 -1.0 -1.0 False
122 0.0 0.0 False
123 0.0 0.0 False
124 0.0 0.0 False
125 0.0 0.0 False
126 0.0 0.0 False
127 0.0 0.0 False
128 0.0 0.0 False
129 0.0 0.0 False
130 -1.0 0.0 False
131 -1.0 0.0 False
132 -1.0 0.0 False
133 -1.0 0.0 False
134 -1.0 0.0 False
135 -1.0 0.0 False
136 -1.0 0.0 False
137 -1.0 0.0 False
138 -1.0 0.0 False
139 -1.0 0.0 False
140 -1.0 0.0 False
141 -1.0 0.0 False
142 -1.0 0.0 False
143 -1.0 0.0 False
144 -1.0 0.0 False
145 -1.0 0.0 False
146 -1.0 0.0 False
147 -1.0 0.0 False
148 -1.0 0.0 False
149 -1.0 0.0 False
150 -1.0 0.0 False
151 -1.0 0.0 False
152 -1.0 0.0 False
153 -1.0 0.0 False
154 -1.0 0.0 False
155 -1.0 0.0 False
156 -1.0 0.0 False
157 -1.0 0.0 False
158 -1.0 0.0 False
159 -1.0 0.0 False
160 -1.0 0.0 False
161 -1.0 0.0 False
162 -1.0 0.0 False
163 -1.0 0.0 False
164 -1.0 0.0 False
165 -1.0 0.0 False
166 -1.0 0.0 False
167 -1.0 0.0 False
168 -1.0 0.0 False
169 -1.0 0.0 False
170 0.0 0.0 False
171 0.0 0.0 False
172 0.0 0.0 False
173 0.0 0.0 False
174 0.0 0.0 False
175 0.0 0.0 False
176 0.0 0.0 False
177 0.0 0.0 False
178 0.0 0.0 False
179 0.0 0.0 False
180 0.0 0.0 False
181 0.0 0.0 False
182 0.0 0.0 False
183 0.0 0.0 False
184 0.0 0.0 False
185 0.0 0.0 False
186 0.0 0.0 False
187 0.0 0.0 False
188 0.0 0.0 False
189 0.0 0.0 False
190 0.0 0.0 False
191 0.0 0.0 False
192 0.0 0.0 False
193 0.0 0.0 False
194 0.0 0.0 False
Any help is appreciated!
IIUC, use numpy.select
:
import numpy as np
conds = [df.eq(1).any(axis=1), # <- 1st rule
df.isin([-1, 0]).all(axis=1), # <- 2nd rule
df.eq(0).any(axis=1)] # <- 3rd rule
vals = [True, False, np.nan]
df["Boosted"] = np.select(conds, vals, default=np.nan).astype(bool)
Output :
print(df)
Column A Column B Boosted
0 1 -1 True
1 0 -1 False
2 -1 1 True