将季度和财务年度列合并到熊猫的日期列中

时间:2016-01-26 11:18:37

标签: python pandas python-datetime

我有一个pandas数据框,其中财务年度列在一列中,而该季度列在另一列中。

我想将它们合并为一个列。

格式为:

Financial Year   Financial Quarter
2015/16          1
2015/16          1

我计划根据“财务年度”列创建一个日期列,然后按财务季度抵消。

我的第一步是:

df['date'] = pd.to_datetime(df['Financial Year'], format="%Y/%y")

但是我对第二步感到有些困惑。

有没有更好的方法在一次传递中组合来自多个列的字符串数据?

1 个答案:

答案 0 :(得分:1)

IIUC您可以先从列Financial Year中提取年份,然后将BQuarterBeginapply与列year1year2一起使用:

from pandas.tseries.offsets import *

print df
  Financial Year  Financial Quarter
0        2015/16                  1
1        2015/16                  1

df[['year1', 'year2']] = pd.DataFrame([ x.split('/') for x in df['Financial Year'].tolist()])
df['year1'] = pd.to_datetime(df['year1'], format="%Y") 
df['year2'] = pd.to_datetime(df['year2'], format="%y") 
print df
  Financial Year  Financial Quarter      year1      year2
0        2015/16                  1 2015-01-01 2016-01-01
1        2015/16                  1 2015-01-01 2016-01-01

df['date1'] = df.apply(lambda x:(x['year1'] + BQuarterBegin(x['Financial Quarter'])), axis=1)
df['date2'] = df.apply(lambda x:(x['year2'] + BQuarterBegin(x['Financial Quarter'])), axis=1)
print df
  Financial Year  Financial Quarter      year1      year2      date1  \
0        2015/16                  1 2015-01-01 2016-01-01 2015-03-02   
1        2015/16                  1 2015-01-01 2016-01-01 2015-03-02   

       date2  
0 2016-03-01  
1 2016-03-01