Mam ramkę danych wypełnioną transakcjami zaczerpniętymi ze strategii handlowej. Logika w strategii handlowej musi zostać zaktualizowana, aby zagwarantować, że handel nie zostanie podjęty, jeśli strategia jest już w obrocie handlowym - ale to inny problem. Dane handlowe dla wielu poprzednich transakcji są odczytywane do ramek danych z pliku csv.Porównywanie wierszy DataFame Pandy i upuszczanie wierszy z nakładającymi się datami
Oto mój problem dla danych, które posiadam: Potrzebuję wykonać porównanie ramek danych według rzędu, aby ustalić, czy wartość Entrydate dla rowX jest mniejsza niż ExitDate rowX-1.
Próbkę moich danych:
Row 1:
EntryDate ExitDate
2012-07-25 2012-07-27
Row 2:
EntryDate ExitDate
2012-07-26 2012-07-29
Row 2 musi zostać usunięty, ponieważ jest to kompromis, który nie powinien mieć miejsce.
Mam problem z określeniem, które wiersze są duplikatami, a następnie ich upuszczeniem. Próbowałem z approach in answer 3 of this question przy odrobinie szczęścia, ale nie jest idealny, ponieważ muszę ręcznie iterować przez ramkę danych i czytać dane każdego wiersza. Moje obecne podejście jest poniżej i jest brzydkie, jak tylko możliwe. Sprawdzam daty, a następnie dodam je do nowej ramki danych. Dodatkowo to podejście daje mi wielokrotne duplikaty w ostatecznej ramce danych.
for i in range(0,len(df)+1):
if i+1 == len(df): break #to keep from going past last row
ExitDate = df['ExitDate'].irow(i)
EntryNextTrade = df['EntryDate'].irow(i+1)
if EntryNextTrade>ExitDate:
line={'EntryDate':EntryDate,'ExitDate':ExitDate}
df_trades=df_trades.append(line,ignore_index=True)
Jakieś przemyślenia lub pomysły, jak skuteczniej to osiągnąć?
Możesz click here, aby zobaczyć próbkowanie moich danych, jeśli chcesz spróbować odtworzyć moją rzeczywistą ramkę danych.
należy unikać unikania pętli! –
Tak. Wiem ... ale to był jedyny sposób, w jaki mogłem zacząć :) –