Pandas:如何找到与特定值匹配的列数据?

lvjbypge  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(95)

我尝试遍历列,并检查是否在任何时候存在值-1,0,1或2。然后我想创建一个新的列,其中值为布尔值。True用于大于或等于1的值,False用于等于-1的值。这将发生在我的数据集中的每一行。
| 色谱柱A|B栏|助推|
| --------------|--------------|--------------|
| 1|-1|真的|
| 0|-1|假的|
| -1|1|真的|
规则如下:
1.如果任意列中存在1,则该行的“Boosted”为True
1.如果只有-1或0,则该行的“Boosted”为False
1.如果只有0,则该行的“Boosted”为NaN
下面是我目前拥有的代码,它是result。我知道我可以运行多个条件语句,但我认为当越来越多的列被添加时,这对以后来说太多了。

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

任何帮助是赞赏!

xkftehaa

xkftehaa1#

IIUC,使用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)

输出:

print(df)

   Column A  Column B  Boosted
0         1        -1     True
1         0        -1    False
2        -1         1     True
qhhrdooz

qhhrdooz2#

重命名第一列:

handicap_test_cols.rename(columns={handicap_test_cols.columns[0]:'col0'}, inplace=True)

使用Timeless的解决方案,但更改条件和值的一些顺序:

conds = [handicap_test_cols.eq(1).any(axis=1), handicap_test_cols.drop('col0', axis=1).eq(0).all(axis=1), handicap_test_cols.drop('col0', axis=1).isin([-1, 0]).all(axis=1)]
vals = [True, np.nan, False]

创建输出列“boost”:

handicap_test_cols["boost"] = np.select(conds, vals, default="")

感谢永恒,我一直在寻找解决我自己的问题,太和永恒的工作!

相关问题