Как найти индекс ненулевого элемента, которого нет в списке? - PullRequest
1 голос
/ 27 марта 2019

Моя система - python3.6, с numpy 1.16.2, scipy 1.2.1, matplotlib 3.0.3

import pandas as pd
import numpy
df=pd.DataFrame({'col1':['a','b','c'],'col2':['d',numpy.NaN,'c'],'col3':['c','b','b']})
df = df.astype({"col2": 'category'})
print(df)

. Вывод вышеприведенного сценария:

  col1 col2 col3
0    a    d    c
1    b  NaN    b
2    c    c    b

Iхотите найти индекс ненулевого элемента в серии col2, категория которого не входит в ['a','b','c']

В этом случае d не является null и не находится в ['a','b','c'], тогдаожидаемый результат должен быть индексом d, который равен 0

Мое решение как удар:

getindex=numpy.where(~df['col2'].isin(['a','b','c']) & df['col2'].notna())
#if getindex is not empty, print it
if not all(getindex):
    print(getindex)

Вывод моего сценария решения:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

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

getindex=df.index[(~df['col2'].isin(['a','b','c']) & df['col2'].notna())]
print (getindex)
Int64Index([0], dtype='int64')

Если хотите, выберите первое значение без ошибок, если значение не существует:

print (next(iter(getindex), 'no match'))
0

Если хотите if empty, используйте для тестирования Index.empty:

if not getindex.empty:
    print (getindex)

Ваше решение должно работать, если добавить [0] для выбора первого массива из списка:

getindex=np.where(~df['col2'].isin(['a','b','c']) & df['col2'].notna())[0]
print (getindex)
[0]
1 голос
/ 27 марта 2019

Изменить в вас, если условие

getindex=np.where(~df['col2'].isin(['a','b','c']) & df['col2'].notna())
if any(~df['col2'].isin(['a','b','c']) & df['col2'].notna()): # change here to any 
    print(getindex)

(array([0], dtype=int64),)

Также опирайтесь на ваше слово #if getindex is not empty, print it

if len(getindex)!=0:
    print(getindex)

(array([0], dtype=int64),)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...