使用Python Pandas将每年的财政数据中的元组与日期标签混合成时间序列

2024-09-30 06:25:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将SQL->;.csv数据转储平面文件转换为每个公司的时间序列。你知道吗

对我来说,关键是数据被组织成每年4个季度的元组。季度结束日期是每个公司的第一个元组中给出的会计季度。我需要把这些数据转换成一个日历季度的时间序列,但我不知道怎么做。你知道吗

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

每个公司总是有相同数量的元组,但可能包含空值。下面的示例数据框行突出显示了两个具有不同会计年度结束日期的公司

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以获得季度日期标签

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

然后我通常会做一个熊猫约会范围

rng=pd.date_range(end='2016-12-31',freq='Q',periods=20)

我很困惑,因为最多有20个句点,可能更少,而且开始和结束是由第一个元组动态定义的,而不是像假设元组是日历年那样与元组中的位置绑定。你知道吗

我该怎么办?你知道吗


Tags: 数据时间公司epsyearfullinc元组
1条回答
网友
1楼 · 发布于 2024-09-30 06:25:13

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

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)

给予

    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

相关问题 更多 >

    热门问题