我需要查找(并删除)所有元素都大于某个常量的行,忽略NaN值:
In[23]: df
Out[23]:
0 1 2 3 4
290 4.0 16.0 18.0 12.0 8.0
291 16.0 18.0 12.0 8.0 9.0
292 18.0 12.0 8.0 9.0 9.0
293 12.0 8.0 9.0 9.0 15.0
294 8.0 9.0 9.0 15.0 18.0
295 9.0 9.0 15.0 18.0 18.0
296 9.0 15.0 18.0 18.0 16.0
297 15.0 18.0 18.0 16.0 20.0
298 18.0 18.0 16.0 20.0 NaN
299 18.0 16.0 20.0 NaN 16.0
300 16.0 20.0 NaN 16.0 14.0
301 20.0 NaN 16.0 14.0 NaN
302 NaN 16.0 14.0 NaN 16.0
303 16.0 14.0 NaN 16.0 15.0
304 14.0 NaN 16.0 15.0 15.0
305 NaN 16.0 15.0 15.0 12.0
306 16.0 15.0 15.0 12.0 16.0
307 15.0 15.0 12.0 16.0 15.0
308 15.0 12.0 16.0 15.0 14.0
309 12.0 16.0 15.0 14.0 17.0
做天真:
In[24]:df>10
Out[24]:
0 1 2 3 4
290 False True True True False
291 True True True False False
292 True True False False False
293 True False False False True
294 False False False True True
295 False False True True True
296 False True True True True
297 True True True True True
298 True True True True False
299 True True True False True
300 True True False True True
301 True False True True False
302 False True True False True
303 True True False True True
304 True False True True True
305 False True True True True
306 True True True True True
307 True True True True True
308 True True True True True
309 True True True True True
由于NaN is not > 10
因此错过了几个合法的行,因此给了False
我需要删除行297-309。如何修改布尔索引以忽略NaN值?
答案 0 :(得分:2)
您需要or
使用|
布局条件In [326]:
(df > 10) | (df.isnull())
Out[326]:
0 1 2 3 4
290 False True True True False
291 True True True False False
292 True True False False False
293 True False False False True
294 False False False True True
295 False False True True True
296 False True True True True
297 True True True True True
298 True True True True True
299 True True True True True
300 True True True True True
301 True True True True True
302 True True True True True
303 True True True True True
304 True True True True True
305 True True True True True
306 True True True True True
307 True True True True True
308 True True True True True
309 True True True True True
,并且由于运算符优先级而使用括号作为条件:
namespace go a.a1 // whatever you need, but exactly one per IDL file
答案 1 :(得分:1)
将与or
(mask = (df>10) | df.isnull()
#alternatively
#mask = (df.gt(10)) | df.isnull()
print (mask)
0 1 2 3 4
290 False True True True False
291 True True True False False
292 True True False False False
293 True False False False True
294 False False False True True
295 False False True True True
296 False True True True True
297 True True True True True
298 True True True True True
299 True True True True True
300 True True True True True
301 True True True True True
302 True True True True True
303 True True True True True
304 True True True True True
305 True True True True True
306 True True True True True
307 True True True True True
308 True True True True True
309 True True True True True
):
True
它为NaN
s:
print (df.isnull())
0 1 2 3 4
290 False False False False False
291 False False False False False
292 False False False False False
293 False False False False False
294 False False False False False
295 False False False False False
296 False False False False False
297 False False False False False
298 False False False False True
299 False False False True False
300 False False True False False
301 False True False False True
302 True False False True False
303 False False True False False
304 False True False False False
305 True False False False False
306 False False False False False
307 False False False False False
308 False False False False False
309 False False False False False
SELECT CASE
WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
ELSE '>4 Months' END AS `Length`,
COUNT(DISTINCT(person.ID)) AS `COUNT`
FROM person
INNER JOIN opportunity AS o
INNER JOIN Organization AS org
ON person.EntityID = o.id
AND O.OrganizationID = Org.ID
WHERE person.TitleID = 2
AND o.bID = 1
GROUP BY `Length`
ORDER BY `Length` ASC;