gpt4 book ai didi

python - 如何计算每月变化并将其绘制为 varchar

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:08 24 4
gpt4 key购买 nike

我有两个给定的数组,一个填充了日期时间,另一个填充了一些值。这些数组在 matplotlib 图表中绘制为曲线。现在我必须计算每月的变化(每个月的第一个值和最后一个值之间的差)并将其绘制为条形图。我知道如何绘制条形图,但我不知道如何用 python 计算值并将它们放入新数组中,以便我可以绘制它们。

vals 和dates 数组具有相同的大小,vals[x] 中是dates[x] 的值。日期数组中的日期时间也按升序排列。

这是一个小例子,说明我如何绘制值。仅举几个值作为示例。

import matplotlib.pyplot as plt
import datetime

fig,ax = plt.subplots()

# only exampledata, there are approx. 5000 values per day
vals = [1,2,3,6,7,3]
dates =[ datetime.datetime.strptime('2017-01-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-02T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-31T23:59:59', '%Y-%m-%dT%H:%M:%S'),

datetime.datetime.strptime('2017-12-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-15T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-31T23:59:59', '%Y-%m-%dT%H:%M:%S')
]


ax.plot_date(dates, vals, ls='-',marker='',markevery=10000)
plt.grid(b=True, which='both', color='0.85',linestyle='-')

plt._show()

该数据显示的预期值为:

Jan 2
Feb 0
Mar 0
Apr 0
May 0
Jun 0
Jul 0
Aug 0
Sep 0
Oct 0
Nov 0
Dec -3

最佳答案

如果您不介意使用pandas,以下示例基于我对问题和所有评论的最佳理解。关键步骤是:

  1. 对数据进行排序,以确保每个月的​​第一个值和最后一个值按顺序排列
  2. 按月对数据进行分组
  3. 在每个组(月)中,应用最后 - 第一个
  4. 使用每月更改全部为 0 的初始 DataFrame,并使用上一步的结果更新它
  5. 可选。将数据索引更改为缩写的月份名称

这是代码:

import datetime

import matplotlib.pyplot as plt
import pandas as pd

vals = [1,2,3,6,7,3]
dates =[datetime.datetime.strptime('2017-01-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-02T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-31T23:59:59', '%Y-%m-%dT%H:%M:%S'),

datetime.datetime.strptime('2017-12-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-15T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-31T23:59:59', '%Y-%m-%dT%H:%M:%S')
]

df = pd.DataFrame(data=vals, index=dates)
gdf = df.sort_index().groupby(df.index.month).apply(lambda g: g.iloc[-1] - g.iloc[0])
mchange = pd.DataFrame([0] * 12, index=list(range(1,13)))
mchange.update(gdf)
mchange.index = pd.to_datetime(mchange.index, format="%m").strftime("%b")

mchange.plot.bar()
plt.legend().remove()
plt.show()

关于python - 如何计算每月变化并将其绘制为 varchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44809461/

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