使用matplotlib绘制百分位数图表

4

我有三个数据框 df1、df2 和 df3。我将它们合并为一个数据框 df。现在我想要找到每个日期在数据框中的最小值、五分位数、25 分位数、中位数、90 分位数和最大值,并绘制图表(每个日期的线图),其中 X 轴表示百分位数,Y 轴表示数值。

df1
    date          value
0   2017-11-06    10.20
1   2017-11-06    40.20
2   2017-11-06    35.10
3   2017-11-06    90.45
4   2017-11-06    60.23

df2
    date          value
1   2017-11-07    110.20
2   2017-11-07    500.26
3   2017-11-07    200.16
4   2017-11-07    350.01
5   2017-11-07    89.20

df3
    date          value
1   2017-11-08    101.45 
2   2017-11-08    160.34
3   2017-11-08    41.54
4   2017-11-08    192.42
5   2017-11-08    111.12


df

    date          value
0   2017-11-06    10.20
1   2017-11-06    40.20
2   2017-11-06    35.10
3   2017-11-06    90.45
4   2017-11-06    60.23
5   2017-11-07    110.20
6   2017-11-07    500.26
7   2017-11-07    200.16
8   2017-11-07    350.01
9   2017-11-07    89.20
10  2017-11-08    101.45 
11  2017-11-08    160.34
12  2017-11-08    41.54
13  2017-11-08    192.42
14  2017-11-08    111.12
1个回答

10

如果我理解得正确,可以使用 groupby + agg/quantile

g = df.groupby('date')

i = g['value'].quantile([0.05, 0.25, 0.5, 0.9]).unstack()
j = g['value'].agg(['min', 'max'])

pd.concat([i, j], 1)

              0.05    0.25     0.5      0.9    min     max
date                                                      
2017-11-06  15.180   35.10   40.20   78.362  10.20   90.45
2017-11-07  93.400  110.20  200.16  440.160  89.20  500.26
2017-11-08  53.522  101.45  111.12  179.588  41.54  192.42

就情节而言,这应该足够了 -

i.T.plot(subplots=True)
plt.show()

enter image description here


谢谢你的帮助。我不想要子图,所以我将subplots=True移除了。我该如何控制Y轴上的刻度间距(值)? - Sun
@Sun,没问题。这只是我决定打出来向你展示图形的方式。此外,我对mplotlib并不太有经验,但这可能会对你有帮助:https://dev59.com/x2cs5IYBdhLWcg3wu2jS#12608937 - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接