Код: Выделить всё
def pivotid(df1, l, n1, n2):
if l-n1 < 0 or l+n2 >= len(df1):
return 0
pividlow=1
pividhigh=1
for i in range(l-n1, l+n2+1):
if(df1.low[l]>df1.low[i]):
pividlow=0
if(df1.high[l]3
2019-02-01
Валюта EURUSD
1,1488
1.1435
4
04 февраля 2019 г.< /td>
Валюта EURUSD
1,1466
1,1425
5
2019-02-05
Валюта EURUSD
1.1441
1.1401
6
2019-02-06
Валюта EURUSD
1,1410
1,1361
7
07.02.2019
Валюта EURUSD
1,1368
1,1325
< td>8
2019-02-08
Валюта EURUSD
1,1351
1.1321
9
11 февраля 2019 г.< /td>
EURUSD Валюта
1,1330
1,1267
применение
d1['pivot'] = d1.apply(lambda x : Pivotid(d1, x.name, 1, 1), axis=1)
ДАТА
ID
PX_HIGH
PX_LOW
Pivot
0
29.01.2019
Валюта EURUSD
1,1450
1,1411
0
1
30 января 2019 г.
Валюта EURUSD
1.1502
1.1406
1
2
31 января 2019
Валюта EURUSD
1,1514
1.1436
2
3
2019-02-01
Валюта EURUSD
1,1488
1,1435
0
4
2019-02-04
Валюта EURUSD
1,1466
1,1425
0
5
05.02.2019
Валюта EURUSD
1,1441
1,1401
0
6
06.02.2019
Валюта EURUSD
1,1410
1,1361
0
7
07.02.2019
Валюта EURUSD
1,1368
1,1325
0
8
2019-02-08
Валюта EURUSD
1,1351
1,1321
0
9< /td>
11 февраля 2019 г.
Валюта EURUSD
1,1330
1.1267
0
однако, если мой набор данных состоит из разных идентификаторов по общему индексу, но с одинаковым периодом времени, например, начиная с 1 января 2019 года
ДАТА
ID
PX_HIGH
PX_LOW
1358
29.01.2019
XAUUSD Валюта
1312.02
1302.01
1359
30 января 2019
XAUUSD Валюта
1323,43
1309.10
1360
31 января 2019
XAUUSD Валюта
1326,33
1317,51
1361
01.02.2019
Валюта XAUUSD
1323,56
1316,24
1362
< td>2019-02-04
XAUUSD Валюта
1319,11
1308,73
1363
2019-02-05
XAUUSD Валюта
1316,95
1310,80
1364
06 февраля 2019
XAUUSD Валюта
1315,87
1305,83
1365
07.02.2019
XAUUSD Валюта
1312,00
1302,85
1366
08.02.2019
Валюта XAUUSD
1315,71
1307,83
1367
< td>2019-02-11
XAUUSD Валюта
1314,95
1303,74
Я пытаюсь использовать эти группы:
[code]grouped1 = data.groupby('ID')
grouped1 = grouped1.apply(lambda x: x.reset_index(level=0, drop=True))
df['pivot'] = grouped1.apply(lambda x: pivotid(grouped1, x.index[0], 1, 1))
df['pivot'] = grouped1.apply(lambda x: float(pivotid(x, x.index[0], 1, 1)))
Я знаю, что могу использовать Rolling(n1).max() или argrelextrema, но я был бы признателен за помощь.
как указано выше, см. выше
Подробнее здесь: https://stackoverflow.com/questions/783 ... r-function