Написать Excel с пандами (разные листы и строки) - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно записать в csv некоторые возвраты валюты после 2 событий (в основном, если столбец цены выше или ниже некоторых других вычислений).Проблема в том, что у меня есть 2 возможных результата, для покупок и продаж (каждый должен быть в отдельном листе в Excel), и после того, как произошли 2 события, я хочу знать доходность в течение следующих 20 дней.Таким образом, каждое «событие» (условия выполняются) должно быть добавлено в строку, а результаты 20 дней после «события» происходят каждый в столбце.

Так, например, если у меня есть 30 событий в части покупки и 30 событий в части продажи, у меня должно быть 2 листа в файле excel, и каждый со следующими заголовками «событие №» и 1,2,3,4 ... 20.

Файл будет содержать 31 строку (заголовок + 30 событий) и 21 столбец (Event + 20 ежедневных возвратов).

Я написалкод для всей программы, кроме той части, в которой я записываю результаты в файл excel.Надеюсь, кто-нибудь может мне помочь.Я исключил чтение входных файлов, потому что я знаю, как это сделать.Я также знаю, как писать в csv, но в моем случае это немного сложнее и нуждается в помощи.Вот код, спасибо.

Пример вывода должен выглядеть следующим образом Пример вывода Здесь , лист продажи такой же.

Пример выходных данных:

   Events 1_day_after 2_day_after 3_day_after 4_day_after
0       1         XXX         XXX         XXX         XXX
1       2         XXX         XXX         XXX         XXX
2       3         XXX         XXX         XXX         XXX
3       4         XXX         XXX         XXX         XXX
4       5         XXX         XXX         XXX         XXX

count_first_event = 0
buy=0
results_buy = []

for x in range(2711): 
     #is the first condition meet? 
     if df.iloc[x,3]>df.iloc[x,5] and df.iloc[x+1,3]<df.iloc[x+1,5]:
         count_first_event=count_first_event+1

         class BreakIt(Exception): pass
         try:    
             for y in range(20):
                 #is the second condition meet?
                 if df.iloc[x+y+1,3] <= df.iloc[x+y+1,6]:
                     buy=buy+1
                     
                     for z in range(20): 
                         #If we are here, just run the 20 times and then come back to the first FOR loop please!                    
                         results_buy.append(df.iloc[x+y+z+2,9])
                         if z==19:
                             raise BreakIt    
         except BreakIt:   
             pass     

print (results_buy)
...