Как отобразить значения моих столбцов, превышающие определенный порог?

#pandas #python-2.7 #seaborn

#pandas #python-2.7 #сиборн

Вопрос:

Я некоторое время сталкивался с этой проблемой. У меня есть набор данных, который выглядит более или менее так:

 Students     Subject       Mark
1            M F           7 4 3 7
2            I             5 6 
3            M F I S       2 3 0 
4            M             2 2 
5            F M I         5 1
6            I M F         6 2 3
7            I M           7
 

Теперь я хочу создать диаграмму с использованием pandas и seaborn, показывающую, сколько учеников:

  • В столбце «Тема» есть еще 3 или более букв
  • Имейте хотя бы один 3 в столбце «Метки»
  • Есть и то, и другое

Я попытался с:

 n_subject = dataset['Subject'].str.count('w ')
dataset['NumberSubjects']= n_subject
n_over = dataset[dataset.n_subject >= 3.0]

 

Но это не работает, и я застрял. Я уверен, что это очень простая проблема, но я не знаю, что делать.

Комментарии:

1. dataset[dataset.n_subject >= 3.0] не имеет смысла, потому что вы назначили эту серию в строке выше с именем ‘NumberSubjects’, поэтому фильтр должен быть: dataset[dataset['NumberSubjects'] >= 3]

2. @ALollz ты прав! Но если я это сделаю n_over = dataset[dataset['NumberSubjects'] >= 3] и распечатаю его, он просто вернет мне мой набор данных

Ответ №1:

3 или более объектов:

 df["Subject"].str.count("w ") >= 3
 

Имеет одну или несколько отметок 3:

 df["Mark"].str.count("3") >= 1
 

Оба:

 (df["Subject"].str.count("w ") >= 3) amp; (df["Mark"].str.count("3") >= 1)
 

Логическое представление:

    Students  Subject     Mark    one    two  three
0         1      M F  7 4 3 7  False   True  False
1         2        I      5 6  False  False  False
2         3  M F I S    2 3 0   True   True   True
3         4        M      2 2  False  False  False
4         5    F M I      5 1   True  False  False
5         6    I M F    6 2 3   True   True   True
6         7      I M        7  False  False  False
 

Комментарии:

1. Большое вам спасибо! Тем не менее, я все еще не уверен в том, как перейти к форме здесь, чтобы построить ее. Когда я строю график, я обычно делаю что-то вроде: sns.countplot(x= "---", data =dataset) . Но здесь я понятия не имею, как отобразить все три «столбца»

Ответ №2:

Я не совсем уверен, каким должен быть график, представляющий (краткое описание отметки?) Но вот то, что вам нужно для целей фильтрации. Кроме того, количество строк также учитывает пустые пробелы, но есть несколько способов справиться с этим. Я просто даю вам представление о том, что / как это сделать.

 >>> m1 = df.Subject.apply(lambda x: len(x.split()) >= 3)
>>> m2 = df.Mark.str.contains('3')
>>> m3 = m1|m2

>>> df[m1]
   Students  Subject    Mark
2         3  M F I S  2 3 0
4         5    F M I     5 1
5         6    I M F   6 2 3
    
>>> df[m2]

   Students  Subject     Mark
0         1      M F  7 4 3 7
2         3  M F I S   2 3 0
5         6    I M F    6 2 3

>>> df[m3]

   Students  Subject     Mark
0         1      M F  7 4 3 7
2         3  M F I S   2 3 0
4         5    F M I      5 1
5         6    I M F    6 2 3
 

Комментарии:

1. Верно, это то, что я вставил в disclaimer часть ответа 🙂 Исправил это сейчас, хотя

2. Спасибо! На моем столбчатом графике должны отображаться четыре столбца: один, когда m1 имеет значение true, один, когда соблюдается m2, третий, когда соблюдается m3, и последний, если ни одно из условий не выполняется. Однако я действительно не уверен, что здесь делать.