python - 如何按中值对 pandas 中的箱线图进行排序?

标签 python pandas boxplot

我想按类别 XY 在数据框 df 中绘制列 Z 的箱线图。如何按中位数降序对箱线图进行排序?

import pandas as pd
import random
n = 100
# this is probably a strange way to generate random data; please feel free to correct it
df = pd.DataFrame({"X": [random.choice(["A","B","C"]) for i in range(n)], 
                   "Y": [random.choice(["a","b","c"]) for i in range(n)],
                   "Z": [random.gauss(0,1) for i in range(n)]})
df.boxplot(column="Z", by=["X", "Y"])

请注意 this question非常相似,但它们使用不同的数据结构。我对 pandas 比较陌生(一般只做过一些关于 python 的教程),所以我不知道如何让我的数据与那里发布的答案一起工作。这很可能更像是 reshape 而不是策划问题。也许有使用 groupby 的解决方案?

最佳答案

您可以使用 How to sort a boxplot by the median values in pandas 中的答案但首先您需要对数据进行分组并创建一个新的数据框:

import pandas as pd
import random
import matplotlib.pyplot as plt

n = 100
# this is probably a strange way to generate random data; please feel free to correct it
df = pd.DataFrame({"X": [random.choice(["A","B","C"]) for i in range(n)], 
                   "Y": [random.choice(["a","b","c"]) for i in range(n)],
                   "Z": [random.gauss(0,1) for i in range(n)]})
grouped = df.groupby(["X", "Y"])

df2 = pd.DataFrame({col:vals['Z'] for col,vals in grouped})

meds = df2.median()
meds.sort_values(ascending=False, inplace=True)
df2 = df2[meds.index]
df2.boxplot()

plt.show()

plot

关于python - 如何按中值对 pandas 中的箱线图进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912634/

相关文章:

r - 我可以在 ggplot2 中获得箱线图凹口吗?

r - 在 R plot_ly 中添加 boxplot 显着性指标线和星号

python - Fastapi在浏览器中访问URL时返回404

python - 如何在Python中读取和打印Excel文件中的随机行?

python - 有什么方法可以在 Python pandas 中获取标签编码器的映射?

python - 有条件的 pandas 中两个数据帧的复杂 Map 操作

r - 如何调整使用 R 和 ggplot2 创建的箱线图中的框的大小以考虑不同箱线图中的不同频率?

c++ - 我应该将哪个C++库用于利用第三方应用程序的大型并行计算数字处理项目

python - 不保存某些字段的数据

python - 使用多个过滤条件从较大的数据帧创建较小的数据帧 : using python and pandas