как исправить None поля как ложные в кадре данных - PullRequest
1 голос
/ 11 апреля 2019
       Id      0     1     2     3     4     5
0   apple   True  None  None  None  None  None
1  orange  False  None  True  None  None  None
2  banana   True  None  None  True  None  None
3   guava  False  None  None  None  True  None
4  leeche   None  True  None  None  None  None

вышеуказанный фрейм данных содержит логическое значение и значение None Если любой из 0-5 столбцов имеет значение false, я хочу опустить их в обновленном фрейме данных. учитывая, что None обозначает значение True, поэтому мой результат должен выглядеть следующим образом:

           Id      
0         apple       
2         banana        
4         leeche 

Я не могу понять, как получить комбинированный фильтр по нескольким столбцам.

1 Ответ

3 голосов
/ 11 апреля 2019

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

cols = ['0','1','2','3','4','5']
df = df.loc[df[cols].ne('False').all(1), ['Id']]
#if False is boolean
#df = df.loc[df[cols].ne(False).all(1), ['Id']]
print (df)
       Id
0   apple
2  banana
4  leeche

При необходимости проверьте все столбцы без первого:

df = df.loc[df.iloc[:, 1:].ne('False').all(1), ['Id']]

Объяснение :

Сначала выберите столбцы по столбцамИмена:

#if strings
cols = ['0','1','2','3','4','5']
#if numeric 
#cols = np.arange(6)
print (df[cols])
       0     1     2     3     4     5
0   True  None  None  None  None  None
1  False  None  True  None  None  None
2   True  None  None  True  None  None
3  False  None  None  None  True  None
4   None  True  None  None  None  None

Затем проверьте, не равно ли False по DataFrame.ne:

#if boolean False
print(df[cols].ne(False))
#if string False
#print(df[cols].ne('False'))
       0     1     2     3     4     5
0   True  True  True  True  True  True
1  False  True  True  True  True  True
2   True  True  True  True  True  True
3  False  True  True  True  True  True
4   True  True  True  True  True  True

И проверьте, все ли True с на строкиDataFrame.all:

print(df[cols].ne('False').all(1))
0     True
1    False
2     True
3    False
4     True
dtype: bool

Последняя фильтрация по boolean indexing с выбором Id с [] для одного столбца DataFrame:

print(df[df[cols].ne('False').all(1)])
       Id     0     1     2     3     4     5
0   apple  True  None  None  None  None  None
2  banana  True  None  None  True  None  None
4  leeche  None  True  None  None  None  None

print(df.loc[df[cols].ne('False').all(1), ['Id']])
       Id
0   apple
2  banana
4  leeche
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...