Форум сайта python.su
Мне нужно привести цены к одному уровню (2016-09-29 = 100)
Date A B
2016-09-29 3297.62 2977.98
2016-09-30 3222.24 2980.88
Данные
На выходе должно получится
Date A B C D
2016-09-29 3297.62 2977.98 100 100
2016-09-30 3222.24 2980.88 97.71 100.09
Отредактировано gyddik (Окт. 26, 2016 12:27:00)
Офлайн
20
Офлайн
noob_saibotК сожалению не разобрался.
import pandas as pd import datetime import numpy as np from pandas import DataFrame, read_csv import matplotlib.pyplot as plt import seaborn as sns %matplotlib qt5 dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d') result = pd.read_csv('result.csv', encoding = 'utf-8', parse_dates=['date'], date_parser=dateparse) result = result.set_index(['date']) df1 = (result['sber_junk_bonds']/result['sber_junk_bonds'].loc['2009-08-31']) * 100 s1 = pd.Series(df1) result['sber_jb'] = s1 df2 = (result['abp_price']/result['abp_price'].loc['2009-08-31']) * 100 s2 = pd.Series(df2) result['alpha_fi'] = s2 df3 = (result['alpha_price']/result['alpha_price'].loc['2009-08-31']) * 100 s3 = pd.Series(df3) result['alpha'] = s3 df4 = (result['aeb_price']/result['aeb_price'].loc['2009-08-31']) * 100 s4 = pd.Series(df4) result['alpha_eur'] = s4 df5 = (result['rpv_price']/result['rpv_price'].loc['2009-08-31']) * 100 s5 = pd.Series(df5) result['rpv'] = s5 df6 = (result['vtb_kuz_most']/result['vtb_kuz_most'].loc['2009-08-31']) * 100 s6 = pd.Series(df6) result['vtb'] = s6 df7 = (result['sber_fund_pers']/result['sber_fund_pers'].loc['2009-08-31']) * 100 s7 = pd.Series(df7) result['sber_fp'] = s7 s3 = [s1, s2, s3, s4, s5, s6, s7] ind = pd.concat(s3, axis=1) ind ind.plot() plt.legend() plt.show() fig, axes = plt.subplots(figsize=(20, 10), nrows=4, ncols=2) ind['sber_junk_bonds'].plot(ax=axes[0,0]); axes[0,0].set_title('sber_junk_bonds'); ind['abp_price'].plot(ax=axes[0,1]); axes[0,1].set_title('alpha_bonds'); ind['alpha_price'].plot(ax=axes[1,0]); axes[1,0].set_title('alpha'); ind['aeb_price'].plot(ax=axes[1,1]); axes[1,1].set_title('alpha_eur_bonds'); ind['rpv_price'].plot(ax=axes[2,0]); axes[2,0].set_title('rpv'); ind['vtb_kuz_most'].plot.area(ax=axes[2,1]); axes[2,1].set_title('vtb_kuz_most'); ind['sber_fund_pers'].plot(ax=axes[3,0]); axes[3,0].set_title('sber_fund_pers');


Отредактировано gyddik (Окт. 26, 2016 16:18:00)
Офлайн
35
У вас масштабирование специфическое нужно делить на определенное значение в колонке (пусть это значение соответствует индексу 0).
import pandas as pd from datetime import datetime # Sample data example = pd.DataFrame({'time':[str(datetime.now())]*3, 'A': [10, 20.2, 11], 'B':[0.3, 2, 1.1]}) # Make copy of the data _example = example.copy() # Scaling. _example['C'] = _example.A / _example.A[0] * 100.0 _example['D'] = _example.B / _example.B[0] * 100.0 print _example
print _example[['time', 'A', 'B', 'C', 'D']]
Отредактировано scidam (Окт. 27, 2016 02:27:55)
Офлайн
scidam
У вас масштабирование специфическое нужно делить на определенное значение в колонке (пусть это значение соответствует индексу 0).
(result['sber_junk_bonds']/result['sber_junk_bonds'].loc['2009-08-31']) * 100
df1 = (result['sber_junk_bonds']/result['sber_junk_bonds'].loc['2009-08-31'][0]) * 100
Офлайн