У меня есть эти столбцы цен в этих ценах. CSV структурированы следующим образом:
Date price1 price2 price3 ... price7 price8 price9 price10
2018-10-18 11.49 7.32 7.31 ... 13.47 8.04 4.5055 9.67
2018-10-19 11.51 7.29 7.29 ... 13.41 8.09 4.5149 9.71
2018-10-22 11.47 7.29 7.26 ... 13.33 7.96 4.4772 9.65
2018-10-23 11.48 7.31 7.28 ... 13.34 7.80 4.4583 9.52
2018-10-24 11.58 7.35 7.23 ... 13.32 7.54 4.4206 9.27
Я рассчитал отношения этих цен, используя следующий код:
cols = list(df.columns[1:])
for i,c in enumerate(cols[:-1]):
for c2 in cols[i+1:]:
df['{}/{}'.format(c,c2)] = df[c]/df[c2]
length = len(df['{}/{}'.format(c,c2)].index)
start = df['{}/{}'.format(c,c2)].iloc[0]
end = df['{}/{}'.format(c,c2)].iloc[length-1]
change = str((end - start)/start)
Это добавляет столбцы к df следующим образом:
price1/price2, price1/price3, price1/price4 ...
Что идеально, однако я не хочу, чтобы новые столбцы просто сохраняли общий результат возвращаемых столбцов отношения (рассчитанный по «изменению») в results.csv в следующем формате:
PAIR RETURNS
price1/price2 0.012670773595482977
price1/price3 0.06298657186450757
price1/price4 0.06786323591797078
... ...
EDIT:
df = pd.read_csv("price1.csv")
fieldnames = ["PAIR", "RETURNS"]
with open('results.csv', 'w') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
cols = list(df.columns[1:])
for i,c in enumerate(cols[:-1]):
for c2 in cols[i+1:]:
df['{}/{}'.format(c,c2)] = df[c]/df[c2]
length = len(df['{}/{}'.format(c,c2)].index)
start = df['{}/{}'.format(c,c2)].iloc[0]
end = df['{}/{}'.format(c,c2)].iloc[length-1]
change = str((end - start)/start)
print(length)
print(start)
print(end)
print(change)
row = {"PAIR": df, "RETURNS": change}
writer.writerow(row)
Этот код успешно помещает «изменения» в правый столбец, но он неправильно связывает имена пар со строками. Также по ряду причин между строками есть пробелы:
![enter image description here](https://i.stack.imgur.com/jSitL.png)
EDIT2:
Вывод для print (df) и print (change) выглядит следующим образом (имейте в виду, что значения меняются по мере того, как цикл for продолжает проходить:
0.06298657186450757
Date price1 price2 ... price10 price1/price2 price1/price3
0 2018-10-18 11.49 7.32 ... 9.67 1.569672 1.571819
1 2018-10-19 11.51 7.29 ... 9.71 1.578875 1.578875
2 2018-10-22 11.47 7.29 ... 9.65 1.573388 1.579890
3 2018-10-23 11.48 7.31 ... 9.52 1.570451 1.576923
4 2018-10-24 11.58 7.35 ... 9.27 1.575510 1.601660
Мне нужно найти способ изолировать заголовки в df.