Boxplotting X 值出现不止一次

Boxplotting X values appearing more than once

所以我有这个数据框 df:

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

我希望能够绘制作者数量大于 1 的 x = 作者和 y = 得分的箱线图。因此该图表将仅显示作者 A、B 和 C。原因我想设置这个限制是因为我正在使用的实际数据框包含相当多的作者,并且箱线图最终看起来非常混乱且无法阅读。有办法吗?

您可以使用 groupby + transform('size') 创建一个掩码,将您的 DataFrame 限制为超过 1 行的作者。然后boxplot这个子集。

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


该方法可让您轻松概括为任意数量的行作为阈值。在这种多于 1 行的特殊情况下,您还可以使用 duplicated 对原始文件进行切片:

df[df.duplicated('Author', keep=False)].boxplot(by='Author', column='Score')

首先对 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()

输出: