Вы можете создать MultiIndex
с помощью DatetimeIndex.strftime
и DatetimeIndex.year
, а затем изменить его на unstack
:
rng = pd.date_range('2004-08-19', periods=10, freq='6MS')
df = pd.DataFrame({'Price': range(10)}, index=rng)
print (df)
Price
2004-09-01 0
2005-03-01 1
2005-09-01 2
2006-03-01 3
2006-09-01 4
2007-03-01 5
2007-09-01 6
2008-03-01 7
2008-09-01 8
2009-03-01 9
df.index = [df.index.strftime('%m-%d'), df.index.year]
df = df['Price'].unstack()
print (df)
2004 2005 2006 2007 2008 2009
03-01 NaN 1.0 3.0 5.0 7.0 9.0
09-01 0.0 2.0 4.0 6.0 8.0 NaN
Аналогичное решение, но столбцы лет являются строками:
df.index = df.index.astype(str).str.split('-', 1, expand=True)
df = df['Price'].unstack(0)
print (df)
2004 2005 2006 2007 2008 2009
03-01 NaN 1.0 3.0 5.0 7.0 9.0
09-01 0.0 2.0 4.0 6.0 8.0 NaN