python - 在一张图中绘制多个时间序列

标签 python pandas datetime time-series timeserieschart

我想在一个图中绘制多个时间序列(cat 列中的每个值一个),但还没有努力做到这一点。到目前为止我的代码是:

import numpy as np
import pandas as pd

dat = pd.date_range(start='1/1/2018', end='31/12/2018', freq='H')
num = ['A' + str(x).zfill(4) for x in range(len(dat))]
cat = np.random.choice(['A', 'B', 'C', 'D'], len(dat))

df = pd.DataFrame({'date': dat, 'num': num, 'cat':cat}).set_index('date')

print(df.groupby([pd.Grouper(freq='D'), 'cat']).count().unstack().fillna(0).astype(int))

结果:

           num            
cat          A   B   C   D
date                      
2018-01-01   7   3   5   9
2018-01-02   6   3   6   9
2018-01-03  11   3   8   2
2018-01-04   2   6   5  11
2018-01-05   4   8   4   8
2018-01-06   8   8   3   5
2018-01-07   5   8   6   5
2018-01-08   3   8   5   8

我想绘制不同的类别组合(cat),例如(AB 一起或 C > 和 D 在一起)在一个时间序列图中,使用 matplotlibseaborn 但“卡在”多级索引中...

对于如何选择不同的列组合并绘制它们有什么建议吗?也许有比unstack数据更好的方法。

最佳答案

是的,最好避免列中的 MultiIndex:

df1 = df.groupby([pd.Grouper(freq='D'), 'cat'])['num'].count().unstack(fill_value=0)

或者:

df1 = df.groupby([pd.Grouper(freq='D'), 'cat']).size().unstack(fill_value=0)

然后绘制:

df1[['A','B']].plot()

关于python - 在一张图中绘制多个时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57182256/

相关文章:

python - 扩展管理index.html模板

python - 在包含列表的 Pandas 列中查找字符串

python - 继承 DataFrame 时如何为 'loc' 编写包装器方法

php - 将日期时间输出更改为今天并中断时间

python - 使用 pandas : TypeError: <class 'list' > is not convertible to datetime 将字符串转换为日期时间

mysql - 如何为 MySQL 日期时间列设置默认值?

python - 如何使用 pdfrw 库编辑可编辑的 pdf?

python - 使用python访问yaml文件中的字段

python - 在运行时更改数据框的列名称

Ubuntu 16.04无法安装Python 3.6.0?