我想在一个图中绘制多个时间序列(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
),例如(A
和 B
一起或 C
> 和 D
在一起)在一个时间序列图中,使用 matplotlib
或 seaborn
但“卡在”多级索引中...
对于如何选择不同的列组合并绘制它们有什么建议吗?也许有比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/