подмножество фрейма данных в Python с более чем одним запросом - PullRequest
0 голосов
/ 23 февраля 2019

Какой самый короткий способ подстановить фрейм данных из нескольких столбцов и найти количество строк, соответствующее запросу.

Существует ли более простой способ переписать следующий фрагмент кода.

Цель состоит в том, чтобы найти количество студентов, которые получили оценки по всем четвертям, и тех, кто пропустил только4 квартал.

resDataFrame = df[(df['6th-Grade-Q1'] == 'Y') & (df['6th-Grade-Q2'] == 'Y' ) &  (df['6th-Grade-Q3'] == 'Y') & (df['6th-Grade-Q4'] == 'Y') ]
numberOfStudents = len(resDataFrame.index)
resDataFrame = df[ (df['6th-Grade-Q1'] == 'Y') & (df['6th-Grade-Q2'] == 'Y' ) &  (df['6th-Grade-Q3'] == 'Y') & (df['6th-Grade-Q4'] == 'X') ]
numberOfStudentsMissed = len(resDataFrame.index)

1 Ответ

0 голосов
/ 23 февраля 2019

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

df.filter(like='6th-Grade-Q').eq('Y').all(1).sum()

Если есть другие столбцы, которые начинаются с '6th-Grade-Q', чем эти 4, не используйте фильтр и явно указывайте 4 столбца в списке.Для второго условия вы можете использовать:

(df[['6th-Grade-Q1', '6th-Grade-Q2', '6th-Grade-Q3']].eq('Y').all(1) & df['6th-Grade-Q4'].eq('X')).sum()

Так как вы просто хотите рассчитать, нет необходимости в подстановке исходного DataFrame, а затем вычислять длину.Просто сложите True значения маски.


Если вам нужно более общее решение для проверки множества операторов & между условиями равенства между столбцами, которые не следуют шаблону, то вернитесь к numpy.Сначала укажите список столбцов и равенство, которое вы хотите проверить как кортежи:

import numpy as np
condlist = [('6th-Grade-Q1', 'Y'), ('6th-Grade-Q2', 'Y'),
            ('6th-Grade-Q3', 'Y'), ('6th-Grade-Q4', 'Y')]

np.logical_and.reduce([df[col].eq(val) for col,val in condlist]).sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...