我已经被这个问题困扰了一段时间。我有一个数据集,它看起来或多或少像这样:
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创建一个barplot,显示有多少学生:
- 在<主题>主题> 一栏中再加3个字母在"标记"栏中至少有一个3
- 两者都有
I tried with:
n_subject = dataset['Subject'].str.count('w+')
dataset['NumberSubjects']= n_subject
n_over = dataset[dataset.n_subject >= 3.0]
但是它不起作用,我被卡住了。我确信这是一个非常基本的问题,但我不知道该怎么做。
三个或更多主题:
df["Subject"].str.count("w+") >= 3
有一个或多个3标记:
df["Mark"].str.count("3") >= 1
同时:
(df["Subject"].str.count("w+") >= 3) & (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
我真的不确定barplot应该代表什么(Mark的摘要?)但是这里是你需要过滤的东西。同样,字符串计数也计算空格,但是有多种方法来处理这个问题。我只是给你一个主意做这件事。
>>> 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