gpt4 book ai didi

python - Pandas :如何在彼此之上绘制年度数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:05 25 4
gpt4 key购买 nike

我有一系列按时间值( float )索引的数据,我想获取该系列的 block 并将它们绘制在彼此之上。因此,例如,假设我在 20 周内每 10 分钟获取一次股票价格,我想通过绘制 20 条股票价格线来查看每周模式。所以我的 X 轴是一周,我有 20 条线(对应于一周内的价格)。

已更新

索引不是均匀间隔的值,它是一个 float 。它是这样的:

t = np.arange(0,12e-9,12e-9/1000.0)
noise = np.random.randn(1000)/1e12
cn = noise.cumsum()
t_noise = t+cn
y = sin(2*math.pi*36e7*t_noise) + noise
df = DataFrame(y,index=t_noise,columns=["A"])
df.plot(marker='.')
plt.axis([0,0.2e-8,0,1])

所以索引不是均匀分布的。我正在处理来自模拟器的电压与时间数据。我想知道如何创建一个时间窗口 T,并将 df 拆分为 T 长的 block 并将它们绘制在彼此之上。因此,如果数据是 20*T 长,那么我将在同一个图中有 20 条线。

抱歉造成混淆;我使用了股票类比,认为它可能有所帮助。

最佳答案

假设一个 pandas.TimeSeries 对象作为起点,您可以将按 ISO 周数和 ISO 工作日的元素 datetime.date.isocalendar() .以下语句忽略了 ISO 年份,汇总了每天的最后一个样本。

In [95]: daily = ts.groupby(lambda x: x.isocalendar()[1:]).agg(lambda s: s[-1])

In [96]: daily
Out[96]:
key_0
(1, 1) 63
(1, 2) 91
(1, 3) 73
...
(20, 5) 82
(20, 6) 53
(20, 7) 63
Length: 140

执行下一步可能有更简洁的方法,但目标是将索引从元组数组更改为 MultiIndex 对象。

In [97]: daily.index = pandas.MultiIndex.from_tuples(daily.index, names=['W', 'D'])

In [98]: daily
Out[98]:
W D
1 1 63
2 91
3 73
4 88
5 84
6 95
7 72
...
20 1 81
2 53
3 78
4 64
5 82
6 53
7 63
Length: 140

最后一步是从MultiIndex,为每个工作日创建列,并将工作日数字替换为缩写,以提高可读性。

In [102]: dofw = "Mon Tue Wed Thu Fri Sat Sun".split()

In [103]: grid = daily.unstack('D').rename(columns=lambda x: dofw[x-1])

In [104]: grid
Out[104]:
Mon Tue Wed Thu Fri Sat Sun
W
1 63 91 73 88 84 95 72
2 66 77 96 72 56 80 66
...
19 56 69 89 69 96 73 80
20 81 53 78 64 82 53 63

要为每周创建一个线图,请转置数据框,因此列是周数,行是工作日(请注意,可以通过在上一步中取消堆叠周数来代替工作日来避免此步骤),以及调用 plot

grid.T.plot()

关于python - Pandas :如何在彼此之上绘制年度数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com