熊猫的加权boxplot

use*_*827 11 python boxplot pandas

对于以下数据帧(df),

     ColA      ColA_weights      ColB   ColB_weights
0  0.038671            1073  1.859599             1
1  20.39974           57362  10.59599             1
2  10.29974            5857  2.859599             1
3  5.040000            1288  33.39599             1
4  1.040000            1064  7.859599             1
Run Code Online (Sandbox Code Playgroud)

我想绘制一个加权箱图,其中每个框的权重分别由ColA_weights和ColB_weights给出,我只是做

df.boxplot(fontsize=12,notch=0,whis=1.5,vert=1,widths=0.2)
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有规定包括权重.有解决方案吗

谢谢!

Loi*_*icM 2

正如评论中所建议的,这是一种制作列表的方法,其中每个条目显示的次数与权重指示的次数相同。我认为这不是最聪明的解决方案,有人可以想出更好的解决方案。

我的示例仅适用于 A 列,但您应该能够在 B 列上以相同的方式使用它:

import matplotlib.pyplot as plt

weighted_appearances = []
for index, row in df.iterrows():
    weighted_row = [row.ColA]*row.ColA_weights
    weighted_appearances += weighted_row

plt.boxplot(weighted_appearances)
plt.show()
Run Code Online (Sandbox Code Playgroud)

优点:编写非常简单的解决方案,理论上适用于所有情况(如果您的权重不是整数,则必须以您认为可以接受的方式转换/舍入它们)

缺点:效率不高,如果您正在使用非常大的权重,则必须找到一种方法来“缩小”这些权重以获得合理的内存使用量。