#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, и последний, если ни одно из условий не выполняется. Однако я действительно не уверен, что здесь делать.