Есть ли способ проверить фрейм данных на одно значение? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть такой фрейм данных.

import pandas as pd 
import numpy as np
  
# Creating a dict of lists  
data = {'Name':["Akash", "Geeku", "Pankaj", "Sumitra","Ramlal"], 
       'Branch':["B.Tech", np.nan, "BCA", "B.Tech", "BCA"], 
       'Score':["80","90","60", "30", "B.Tech"], 
       'Result': ["Pass","Pass","Pass","Fail","Fail"]} 
  
# creating a dataframe  
df = pd.DataFrame(data)  
df 

df1:

enter image description here

Then I want to check the dataframe against a value like 'B.Tech' that can be anywhere in the df. And return some df like this one below.

df2:

введите описание изображения здесь

Затем я хочу получить список, в котором значение будет основано на первых 4 логических значениях, например, если какое-либо значение в первых 4 столбцах содержит один + True, новый столбец будет True, в противном случае Ложь

В этом случае мне нужен результат [Истина, Ложь, Ложь, Ложь, Истина]

Извините, я новичок в pandas, интересно if Pandas предоставляет эффективный способ сделать это.

1 Ответ

2 голосов
/ 09 июля 2020

Это сделает это за один go:

(df == "B.Tech").sum(axis=1).astype(bool)

Для объяснения:

df == "B.Tech" возвращает DataFrame той же формы, что и исходный, но просто содержащие значения True / False относительно того, равно ли значение "B.Tech"

.sum(axis=1) суммирует логические значения по строкам, интерпретируя True как 1 и False как 0.

.astype(bool) преобразует результаты суммы обратно в логическое значение, где все, что больше 0, становится True, а 0 становится False.

Обновление:

В качестве альтернативы, как указал Ch3steR, вы можете заменить последнее часть с любая , например:

(df == "B.Tech").any(axis=1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...