gpt4 book ai didi

python - 一种从 pandas 时间序列数据帧生成季节性数据帧的 'pythonic' 方法

转载 作者:行者123 更新时间:2023-11-30 22:26:18 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,可以捕获一段时间范围内的值(可能是多年来每月一次,或者多年来每天一次,或者几个月内每天一次)。无法保证时间序列是连续的(一年中可能会缺少某些月份)

""" no guarantee that this index will have an entry for every month of the time range!"""
dates = pd.date_range('1/1/2015', periods=36, freq='M')
df = pd.DataFrame(index = dates)
df['value'] = df.index.year * 0.1 + df.index.month * 0.05
df.plot()

它可以给我一个简单的时间序列图

enter image description here但我想要制作的是“季节性”情节。这会将每年的数据显示为同一月份索引上的不同行。作为简单的显示:

import numpy as np
index = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
df = pd.DataFrame(index = index)
df[2015] = np.arange(12)*0.4+1
df[2016] = np.arange(12)*0.35+1.4
df[2017] = np.arange(12)*0.5+1.2

df.plot()

enter image description here

我正在寻找一种“Pythonic”或优雅的方式来执行此操作。我的转型尝试是令人难以置信的粗俗、意大利面条、垃圾代码。我确信必须有一些简洁的方法使用 pandas/python 来有效、干净地显示这种转换特别是,我想找到一种抽象的方法来做到这一点,这样我就可以将其概括为制作显示跨天数“季节性”的图表一个月等

首先,我什至不确定构建此图表并以此为基础的良好索引是什么。

最佳答案

您可以使用DatetimeIndex.strftimeDatetimeIndex.year为了正确排序,请使用sorted CategoricalIndex,最后按 pivot reshape :

c = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

df = pd.pivot(index=pd.CategoricalIndex(df.index.strftime('%b'), ordered=True, categories=c),
columns=df.index.year,
values=df['value'])
print (df)

2015 2016 2017
Jan 201.55 201.65 201.75
Feb 201.60 201.70 201.80
Mar 201.65 201.75 201.85
Apr 201.70 201.80 201.90
May 201.75 201.85 201.95
Jun 201.80 201.90 202.00
Jul 201.85 201.95 202.05
Aug 201.90 202.00 202.10
Sep 201.95 202.05 202.15
Oct 202.00 202.10 202.20
Nov 202.05 202.15 202.25
Dec 202.10 202.20 202.30

df.plot()

另一个解决方案是创建新列:

df['months'] = pd.CategoricalIndex(df.index.strftime('%b'), ordered=True, categories=c)
df['years'] = df.index.year
df = df.pivot(index='months', columns='years',values='value')

关于python - 一种从 pandas 时间序列数据帧生成季节性数据帧的 'pythonic' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47259570/

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