我正试图将SQL -> .csv数据转储平面文件转换为每个公司的时间序列。
对我来说,关键是数据被组织成每年4个季度的元组。季度结束日期是每个公司的第一个元组中的财政季度.我需要把这些数据分成一系列的日历季度,但我想不出怎么回事。
如何从这些数据标签构建日期时间索引?
每个公司都有相同数量的元组,但可能包含空值。下面的示例dataframe行突出显示了具有不同财政年度结束日期的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个周期,可能更少,并且开始和结束是由第一个元组动态定义的,并且不像人们假设的那样与元组中的位置绑定,如果元组是日历年。
我该怎么做?
发布于 2015-12-08 11:33:11
您需要根据您所拥有的数据创建日期,而不是定义范围。这就需要重塑你的数据。虽然不是最快捷的,但这似乎适用于您的示例数据:
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 NaNhttps://stackoverflow.com/questions/34143262
复制相似问题