Сначала concat
с axis=1
, а затем необходимо преобразовать имена столбцов в строки, если потребуется обработка позже:
df = pd.concat([annual,quarterly], axis=1).rename(columns=str)
print (df)
2015 2016 2017 2018 2019Q1 2019Q2 2019Q3
A 0.417022 0.720324 0.000114 0.302333 0.396767 0.538817 0.419195
B 0.146756 0.092339 0.186260 0.345561 0.685220 0.204452 0.878117
print (df.columns)
Index(['2015', '2016', '2017', '2018', '2019Q1', '2019Q2', '2019Q3'], dtype='object')
print (df['2019Q2'] - df['2018'])
A 0.236484
B -0.141108
dtype: float64
Если вы хотите работать с периодами, это возможно, ноболее сложный:
df = pd.concat([annual,quarterly], axis=1)
print (df)
2015 2016 2017 2018 2019Q1 2019Q2 2019Q3
A 0.417022 0.720324 0.000114 0.302333 0.396767 0.538817 0.419195
B 0.146756 0.092339 0.186260 0.345561 0.685220 0.204452 0.878117
print (df[pd.Period('2018', freq='A-DEC')])
A 0.302333
B 0.345561
Name: 2018, dtype: float64
print (df[pd.Period('2019Q2', freq='Q-DEC')])
A 0.538817
B 0.204452
Name: 2019Q2, dtype: float64
print (df[pd.Period('2019Q2', freq='Q-DEC')] -
df[pd.Period('2018', freq='A-DEC')])
IncompatibleFrequency: вход имеет другое значение freq = A-DEC от периода (freq = Q-DEC)
Изменитьимя Series
для предотвращения ошибки:
print (df[pd.Period('2019Q2', freq='Q-DEC')].rename('a') -
df[pd.Period('2018', freq='A-DEC')].rename('a'))
A 0.236484
B -0.141108
Name: a, dtype: float64
На мой взгляд, если нужно обрабатывать значения с последним с Periods
, то лучшее работает с той же частотой:
annual.columns = annual.columns.to_timestamp('Q').to_period('Q')
df = pd.concat([annual,quarterly], axis=1)
print (df)
2015Q1 2016Q1 2017Q1 2018Q1 2019Q1 2019Q2 2019Q3
A 0.417022 0.720324 0.000114 0.302333 0.396767 0.538817 0.419195
B 0.146756 0.092339 0.186260 0.345561 0.685220 0.204452 0.878117
print (df[pd.Period('2019Q2', freq='Q-DEC')] -
df[pd.Period('2018Q1', freq='Q-DEC')])
A 0.236484
B -0.141108
dtype: float64