首页 > 解决方案 > 根据百分比变化值绘制多条线图

问题描述

我有一个类似于下面给出的示例的数据集:

| Week       | val1   | val2 |
|------------|--------|------|
| 11/13/2017 | 21785  | 966  |
| 11/20/2017 | 71679  | 3395 |
| 11/27/2017 | 113846 | 5060 |
| 12/4/2017  | 106899 | 5730 |
| 12/11/2017 | 99212  | 5682 |
| 12/18/2017 | 99788  | 4838 |

样本输入

rng = ['11/13/2017','11/20/2017','11/27/2017','12/4/2017','12/11/2017','12/18/2017']
val1= [21785,71679,113846,106899,99212,99788]
val2= [966,3395,5060,5730,5682,4838]
df = pd.DataFrame({ 'Date': rng, 'val1': val1, 'val2': val2})
df

我需要计算行之间的百分比差异,并将其绘制为一张图中的多个折线图。我知道我可以使用 df.pct_change() 计算百分比差异,但是在绘制它时遇到了问题,因为我需要将“周”列设置为计算百分比差异的索引。有没有别的办法?

标签: pythonpandaspython-datetimeplotly-pythonline-plot

解决方案


您可以使用pct_change()指定时间序列freq='7D'。这是您打算做的吗?

df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
df['val1_pct'] = df['val1'].pct_change(freq='7D')
df['val2_pct'] = df['val2'].pct_change(freq='7D')
df
    val1    val2    val1_pct    val2_pct
Date                
2017-11-13  21785   966 NaN NaN
2017-11-20  71679   3395    2.290291    2.514493
2017-11-27  113846  5060    0.588276    0.490427
2017-12-04  106899  5730    -0.061021   0.132411
2017-12-11  99212   5682    -0.071909   -0.008377
2017-12-18  99788   4838    0.005806    -0.148539

import plotly.graph_objects as go

fig = go.Figure()
fig.add_trace(go.Scatter(x=df.index, y=df['val1_pct'],
                    mode='lines',
                    name='val1'))
fig.add_trace(go.Scatter(x=df.index, y=df['val2_pct'],
                    mode='lines',
                    name='val2'))
fig.show()

在此处输入图像描述


推荐阅读