Citat:
Ursprungligen postat av
Astalon
Jag håller på att försöka implementera en investeringsstrategi i python och använder mig bland annat av biblioteket Pandas.
Jag har en dataframe med bland annat en kolumn, kalla den
med värden. Jag vill skapa en kolumn som består av booleska värden, dvs True eller False. Jag vill att den på dag 'i' skall vara true om och endast om
för dagen 'i' är i top 30% av de senaste 100 dagars värde för
.
Ber om ursäkt för formuleringen, känns diffus. Känns som att man kan göra detta på något snyggt sätt mha en for-loop men kommer inte på något sätt.
All hjälp uppskattas!
Jag antar att du har en lista med sånna här "dataframes"? I så fall får du ju börja med att hitta top 30%. Om vi antar att dina 100 frames ligger i listan
frames:
Kod:
top30 = sorted(frame['ATTR'] for frame in frames)[70:]
Koden ovan bygger en ny lista med ATTR ur varje frame, sorterar den, och plockar ut de 30 sista elementen (givet att listan är 100 element lång).
Därefter får du bygga en ny lista, eller populera sånna där frames (antar att man kan sätta element i dem på samma sätt som en dict?).
Ny lista:
Kod:
L = []
for frame in frames:
L.append(frame['ATTR'] in top30)
Pluppa in nytt attribut i sånna där frames (om man nu kan göra så):
Kod:
for frame in frames:
frame['TOP30'] = frame['ATTR'] in top30
Gemensamt för båda styckena ovan är att
frame['ATTR'] in top30 kommer bli
True om värdet ligger i top30-listan. Annars blir det
False.
Du kan roa dig med att förbättra koden genom att bara plocka ut det lägsta elementet ur top30, och sedan jämföra med det för att avgöra om ett element är med i top 30. Det kommer vara effektivare.