Код: Выделить всё
import pandas as pd
import numpy as np
ds = { 'trend' : [1,1,1,1,2,2,3,3,3,3,3,3,4,4,4,4,4], 'price' : [23,43,56,21,43,55,54,32,9,12,11,12,23,3,2,1,1]}
df = pd.DataFrame(data=ds)
Код: Выделить всё
display(df)
trend price
0 1 23
1 1 43
2 1 56
3 1 21
4 2 43
5 2 55
6 3 54
7 3 32
8 3 9
9 3 12
10 3 11
11 3 12
12 4 23
13 4 3
14 4 2
15 4 1
16 4 1
Код: Выделить всё
df.to_csv("df.csv", index = False)
- обходит каждую запись кадра данных
- берёт минимум между ценой, наблюдаемой на каждой итерации, и последней ценой, наблюдаемой в предыдущем тренде.
- Я повторяю запись 0, а минимальная цена равна 23 (есть только этот).
- Я перебираю запись 1 и беру минимум между 43 и 23: результат — 23.
- Мне нужно вычислить минимум между ценой, наблюдаемой в записи 4 () и последняя цена, наблюдаемая для предыдущего тренда (
Код: Выделить всё
price: 43, наблюдаемой в записи 14 (Код: Выделить всё
price: 21). Результат: 21. [/list] Перенесемся к записи 14. [list] [*]Мне нужно чтобы вычислить минимум между ценой) и последняя цена, наблюдаемая для предыдущего тренда (Код: Выделить всё
price: 2Результирующий фрейм данных выглядит следующим образом:Код: Выделить всё
price: 12). Результат — 2. [/list] И так далее. Затем я написал такой код: minimum = [] for i in range(len(df)): ds = pd.read_csv("df.csv", nrows=i+1) d = ds.groupby('trend', as_index=False).agg( {'price':'last'}) d['minimum'] = d['price'].min() minimum.append(d['minimum'].iloc[-1]) ds['minimum'] = minimum
display(ds)Полученный фрейм данных правильный.Код: Выделить всё
trend price minimum 0 1 23 23 1 1 43 43 2 1 56 56 3 1 21 21 4 2 43 21 5 2 55 21 6 3 54 21 7 3 32 21 8 3 9 9 9 3 12 12 10 3 11 11 11 3 12 12 12 4 23 12 13 4 3 3 14 4 2 2 15 4 1 1 16 4 1 1
Проблема в том, что мне нужно применить этот процесс к фрейму данных, который содержит около 1 миллиона записей, и он будет на это уйдет около 48 лет.
Кто-нибудь знает более быстрый способ получить те же результаты, что и выше?
Подробнее здесь: https://stackoverflow.com/questions/786 ... -dataframe