2016-01-26 2 views
1

У меня есть рамка данных pandas, в которой финансовые годы перечислены в столбце, а четверть указана в другом.Сочетание столбцов квартала и финансового года в столбце даты в pandas

Я хотел бы объединить их в одну колонку.

Формат:

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-offsets) или [offset aliases] (http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases) 'BQS' I Думаю, – EdChum

+0

Я подозреваю, что прежде чем двигаться дальше, вам нужно определиться с форматом года, поскольку FY '2015/16' представляется слишком неоднозначным. Pandas внутренне представляет временные метки как число секунд с 1970-01-01, и для этого требуется точный момент времени, а не '2015/16'. Как только вы разобрались с этой проблемой, будет несколько способов двигаться вперед, например, как @EdChum, предложенный выше. –

ответ

1

IIUC вы можете извлечь первые годы из колонки Financial Year, а затем использовать BQuarterBegin и apply его с колоннами year1 и year2:

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

Смежные вопросы