【问题标题】:How to plot values of my columns being above a certain treshold?如何绘制我的列的值高于某个阈值?
【发布时间】:2021-04-26 09:07:39
【问题描述】:

我已经被这个问题困扰了一段时间。我有一个或多或少看起来像这样的数据集:

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]

但它不起作用,我被卡住了。我确定这是一个非常基本的问题,但我不知道该怎么办。

【问题讨论】:

  • dataset[dataset.n_subject >= 3.0] 没有意义,因为您已在上面的行中为该系列分配了名称“NumberSubjects”,因此过滤器应为:dataset[dataset['NumberSubjects'] >= 3]
  • @ALollz 你是对的!但如果我这样做 n_over = dataset[dataset['NumberSubjects'] >= 3] 并打印它,它只会给我我的数据集

标签: pandas python-2.7 seaborn


【解决方案1】:

我不确定条形图应该代表什么(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

【讨论】:

  • 没错,这就是我在答案的disclaimer 部分中提出的内容:-) 不过现在已修复
  • 谢谢!我的 barplot 应该显示四个条:一个当 m1 为真时,一个当 m2 被尊重时,第三个当 m3 被尊重时,如果没有任何条件适用,最后一个。但是,我真的不确定在这里做什么。
【解决方案2】:

3 个或更多科目:

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

【讨论】:

  • 非常感谢!但是,我仍然不确定如何在这里进行绘制。当我绘制图表时,我通常会这样做:sns.countplot(x= "---", data =dataset)。但是在这里我不知道如何绘制所有三个“列”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 2013-07-01
  • 1970-01-01
  • 2021-09-01
  • 2019-08-01
相关资源
最近更新 更多