Boxplotting значения X появляются более одного раза - PullRequest
1 голос
/ 07 февраля 2020

Итак, у меня есть этот фрейм данных: df:

 Author | Score
  A     |   10
  B     |   4
  C     |   8
  A     |   9
  B     |   7
  C     |   6
  D     |   4
  E     |   3

Я хочу иметь возможность построить коробчатый график x = author и y = Score, где количество авторов больше 1. Так что На диаграмме будут отображаться только авторы A, B и C. Причина, по которой я хочу установить это ограничение, заключается в том, что фактический фрейм данных, с которым я работаю, содержит довольно большое количество авторов, и прямоугольник в конечном итоге выглядит крайне загроможденным и неспособным к чтению. Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Вы можете использовать groupby + transform('size'), чтобы создать маску, которая ограничивает ваш DataFrame для авторов с более чем 1 строкой. Затем boxplot это подмножество.

m = df.groupby('Author')['Score'].transform('size').gt(1)
df.loc[m].boxplot(by='Author', column='Score')

enter image description here


Этот метод позволяет легко обобщить произвольное количество строк в качестве порога , В этом особом случае более чем 1 строки вы также можете использовать duplicated для нарезки оригинала:

df[df.duplicated('Author', keep=False)].boxplot(by='Author', column='Score')
1 голос
/ 07 февраля 2020

Сначала посчитайте Authors, сгруппировав их, затем отфильтруйте данные по Counts.

import pandas as pd
import matplotlib.pyplot as plt

# add counts column
df['Counts'] = df.groupby(['Author']).transform('count')
# filter by value > 1
df = df[df['Counts'] > 1]

# plot
df.boxplot(by='Author', column=['Score'])
plt.show()

Вывод:

enter image description here

...