Python, группировка по идентификатору функцииPython

Программы на Python
Anonymous
Python, группировка по идентификатору функции

Сообщение Anonymous »

наткнулся на эту функцию, чтобы найти локальные максимумы и минимумы вокруг каждой строки, где n1/n2 — периоды ретроспективного анализа.

Код: Выделить всё

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)))
они либо не работают, либо подтягивают значения nan для сводного столбца.
Я знаю, что могу использовать Rolling(n1).max() или argrelextrema, но я был бы признателен за помощь.
как указано выше, см. выше

Подробнее здесь: https://stackoverflow.com/questions/783 ... r-function

Вернуться в «Python»