我想按类别 X
和 Y
在数据框 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()
关于python - 如何按中值对 pandas 中的箱线图进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912634/