2016-01-26 98 views
1

我有一個熊貓數據框,其中財務年度列在列中,並且該季度列在另一列中。將季度和財政年度列結合到熊貓的日期列中

我想將它們合併到一個列中。

格式爲:

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

我正打算創建一個基於財政年度列日期列,然後由財政季度抵消它。

我的第一個步驟是:

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

但我有點堅持的第二個步驟。

有沒有更好的方法來組合一列中的多列字符串數據?

+0

你可能以後[商業區](HTTP://pandas.pydata。 org/pandas-docs/stable/timeseries.html#anchored-offset)或[offset aliases](http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases)'BQS' I認爲 – EdChum

+0

我懷疑在繼續之前,你必須決定今年的格式,因爲FY'2015/16'似乎太模糊了。熊貓內部表示時間戳記爲「1970-01-01」以來的秒數,並且這樣做需要一個確切的時間點,而不是「2015/16」。只要你理清了這個問題,就會有幾種方法向前推進,例如上面提供的@EdChum。 –

回答

1

IIUC可以先提取Financial Year柱年,然後使用BQuarterBegin與列year1year2apply它:

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 
+0

太好了。謝謝。清楚的解釋。 – elksie5000

+0

很高興能爲您提供幫助!祝你好運! – jezrael

相關問題