1

SQL -> .csv データ ダンプ フラット ファイルを企業ごとの時系列に変換しようとしています。

私にとって重要なのは、データが 4 四半期の年次タプルに編成されていることです。四半期末日は、各会社の最初のタプルで指定される会計四半期です。データを暦四半期の時系列に変更する必要がありますが、その方法がわかりません。

これらのデータ ラベルから日時インデックスを作成するにはどうすればよいですか?

各会社には常に同じ数のタプルがありますが、null 値が含まれる場合があります。以下のデータフレーム行の例では、会計年度の終了日が異なる 2 つの企業が強調表示されています。

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の期間があり、場合によってはそれ以下であり、開始と終了は最初のタプルによって動的に定義され、タプルが暦年である場合に想定されるようにタプル内の位置に関連付けられていないため、私は困惑しています.

どのように進めればよいですか?

4

1 に答える 1

2

範囲を定義する代わりに、持っているデータから日付を作成する必要があります。それには、データの再形成が必要です。最も派手ではありませんが、これはサンプルデータで機能するようです:

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
于 2015-12-08T11:33:11.287 に答える