首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中,用元素日期标签作为时间序列的年度财政数据的Munge元组

在Python中,用元素日期标签作为时间序列的年度财政数据的Munge元组
EN

Stack Overflow用户
提问于 2015-12-07 21:09:47
回答 1查看 97关注 0票数 1

我正试图将SQL -> .csv数据转储平面文件转换为每个公司的时间序列。

对我来说,关键是数据被组织成每年4个季度的元组。季度结束日期是每个公司的第一个元组中的财政季度.我需要把这些数据分成一系列的日历季度,但我想不出怎么回事。

如何从这些数据标签构建日期时间索引?

每个公司都有相同数量的元组,但可能包含空值。下面的示例dataframe行突出显示了具有不同财政年度结束日期的2家公司。

代码语言:javascript
复制
eps_tuples[300:400]

        Name    Ticker  Field   Year    Qtr 1   Qtr 2   Qtr 3   Qtr 4   FY
953     Accuray Inc     ARAY    EPS     Year    Sep.30  Dec.31  Mar.31  Jun.30  Full Year
943     Accuray Inc     ARAY    EPS     2012    -0.38   -0.15   -0.21   -0.28   -1.02
944     Accuray Inc     ARAY    EPS     2013    -0.31   -0.35   -0.42   -0.25   -1.33
945     Accuray Inc     ARAY    EPS     2014    -0.21   -0.07   -0.06   -0.13   -0.47
946     Accuray Inc     ARAY    EPS     2015    -0.27   -0.13   -0.04   -0.07   -0.51
947     Accuray Inc     ARAY    EPS     2016    -0.12               
960     Accuride Corp   ACW     EPS     Year    Mar.31  Jun.30  Sep.30  Dec.31  Full Year
961     Accuride Corp   ACW     EPS     2012    -0.06   -0.02   -0.37   -0.47   -0.92
962     Accuride Corp   ACW     EPS     2013    -0.31   -0.11   -0.18   0.04    -0.56
963     Accuride Corp   ACW     EPS     2014    -0.07   0.11    0.02    -0.10   -0.04
964     Accuride Corp   ACW     EPS     2015    -0.01   0.13    0.04    -0.05   0.11
965     Accuride Corp   ACW     EPS     2016    0.02    0.11    0.04        

我从切片df开始,只得到季度日期标签

代码语言:javascript
复制
eps_tuples[eps_tuples['FY']=='Full Year'][42:47]

    Name    Ticker  Field   Year    Qtr 1   Qtr 2   Qtr 3   Qtr 4   FY
906     ACCO Brands     ACCO    EPS     Year    Mar.31  Jun.30  Sep.30  Dec.31  Full Year
924     Accretive Healt ACHI    EPS     Year    Mar.31  Jun.30  Sep.30  Dec.31  Full Year
942     Accuray Inc     ARAY    EPS     Year    Sep.30  Dec.31  Mar.31  Jun.30  Full Year
960     Accuride Corp   ACW     EPS     Year    Mar.31  Jun.30  Sep.30  Dec.31  Full Year
978     ACE Limited     ACE     EPS     Year    Mar.31  Jun.30  Sep.30  Dec.31  Full Year

然后我通常会把熊猫的约会范围

代码语言:javascript
复制
rng=pd.date_range(end='2016-12-31',freq='Q',periods=20)

我之所以感到困惑,是因为这里有最多20个周期,可能更少,并且开始和结束是由第一个元组动态定义的,并且不像人们假设的那样与元组中的位置绑定,如果元组是日历年。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-08 11:33:11

您需要根据您所拥有的数据创建日期,而不是定义范围。这就需要重塑你的数据。虽然不是最快捷的,但这似乎适用于您的示例数据:

代码语言:javascript
复制
import datetime

ts_dict = {}
for company in df['Name'].unique():
    tmpdf = df[df['Name'] == company][['Year', 'Qtr 1', 'Qtr 2', 'Qtr 3', 'Qtr 4']].reset_index(drop=True)
    tmpdf.columns = tmpdf.iloc[0]
    tmpdf = tmpdf.drop(0).set_index('Year').unstack().reset_index(name=company)
    tmpdf.index = (tmpdf['Year'].apply(str) + tmpdf[0]).apply(lambda x: datetime.datetime.strptime(x, "%Y%b.%d"))
    ts_dict[company] = tmpdf[company]
pd.DataFrame.from_dict(ts_dict)

给予

代码语言:javascript
复制
    Accuray Inc Accuride Corp
2012-03-31  -0.21   -0.06
2012-06-30  -0.28   -0.02
2012-09-30  -0.38   -0.37
2012-12-31  -0.15   -0.47
2013-03-31  -0.42   -0.31
2013-06-30  -0.25   -0.11
2013-09-30  -0.31   -0.18
2013-12-31  -0.35   0.04
2014-03-31  -0.06   -0.07
2014-06-30  -0.13   0.11
2014-09-30  -0.21   0.02
2014-12-31  -0.07   -0.1
2015-03-31  -0.04   -0.01
2015-06-30  -0.07   0.13
2015-09-30  -0.27   0.04
2015-12-31  -0.13   -0.05
2016-03-31  NaN 0.02
2016-06-30  NaN 0.11
2016-09-30  -0.12   0.04
2016-12-31  NaN NaN
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34143262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档