Вы можете использовать:
#get top10 rows per datetimes in DatetimeIndex
df = df.groupby(level=0).head(10)
#create MultiIndex
df1 = df.set_index('Symbol', append=True)
#print (df1)
#subtract one day and create MultiIndex
df2 = df.set_index(df.index - pd.Timedelta(1, unit='d')).set_index('Symbol', append=True)
#print (df2)
#multiple both Series from first and second DataFrame
df1['new'] = df1['Circulating.Supply'] * df2['Price']
print (df1)
Market.Cap Price Circulating.Supply new
Date Symbol
2017-01-01 BTC 16050414526 998.33 1.607734e+07 1.642702e+10
ETH 715049311 8.17 8.749380e+07 7.331980e+08
XRP 231408729 0.01 3.633730e+10 3.633730e+08
LTC 221718486 4.51 4.914415e+07 2.285203e+08
XMR 190983552 13.97 1.366825e+07 2.193754e+08
ETC 122202804 1.40 8.744412e+07 1.259195e+08
DASH 78524020 11.23 6.992839e+06 8.258543e+07
REP 43994860 4.00 1.100000e+07 4.609000e+07
MAID 43862003 0.10 4.525524e+08 4.072972e+07
STEEM 36999610 0.16 2.295821e+08 3.443731e+07
2017-01-02 BTC 16429072864 1021.75 1.607930e+07 1.678422e+10
ETH 733331862 8.38 8.752531e+07 8.516212e+08
XRP 229312859 0.01 3.633730e+10 3.633730e+08
LTC 228536428 4.65 4.915883e+07 2.276054e+08
XMR 219509938 16.05 1.367528e+07 2.200353e+08
ETC 125743676 1.44 8.747679e+07 1.303404e+08
DASH 82595831 11.81 6.994957e+06 8.939555e+07
REP 46101566 4.19 1.100000e+07 4.697000e+07
MAID 42320210 0.09 4.525524e+08 4.525524e+07
STEEM 35374447 0.15 2.296454e+08 3.674327e+07
2017-01-03 BTC 16786354619 1043.84 1.608136e+07 NaN
ETH 851511659 9.73 8.755683e+07 NaN
XRP 232046528 0.01 3.633730e+10 NaN
LTC 227483720 4.63 4.917295e+07 NaN
XMR 220176407 16.09 1.368161e+07 NaN
ETC 130608332 1.49 8.750880e+07 NaN
DASH 89434687 12.78 6.997071e+06 NaN
REP 46955890 4.27 1.100000e+07 NaN
MAID 44863660 0.10 4.525524e+08 NaN
STEEM 36308540 0.16 2.297532e+08 NaN
РЕДАКТИРОВАТЬ:
Получить первые 10 значений в первый день месяца, изменить на unstack
и установить индекс на месяцperiod:
df1 = (df.groupby(df.index.to_period('m'))
.head(10)
.set_index('Symbol', append=True)['Circulating.Supply']
.unstack())
df1.index = df1.index.to_period('m').rename('month')
#print (df1)
Измените аналог и создайте MultiIndex с периодом месяца:
df2 = df.set_index('Symbol', append=True)['Price'].unstack()
df2.index = [df2.index, df2.index.to_period('m').rename('month')]
#print (df2)
Разделите на месячные периоды, удалите вспомогательный уровень, измените форму и добавьте последний столбец:
s = df2.div(df1, level=1).reset_index(level=1, drop=True).stack().rename('new')
df = df.join(s, on=['Date','Symbol'])
#print (df)