Различия панд между первым и последним сгруппированы по последовательным событиям - PullRequest
0 голосов
/ 03 мая 2018

У меня есть датафрейм, содержащий открытие / закрытие, цвет свечи и количество последовательных свечей.

    date open close color  run
00:01:00  100   102     g    1
00:02:00  102   104     g    2
00:03:00  104   106     g    3
00:04:00  106   105     r    1
00:05:00  105   101     r    2
00:06:00  101   102     g    1  
00:06:00  102   103     g    2 

Я пытаюсь вычислить абсолютное значение разницы между открытием первой свечи в серии и закрытием последней свечи в серии и применить разницу к каждой линии. Результат будет выглядеть как

    date open close color  run  run_length
00:01:00  100   102     g    1      2        # abs(100 - 102)
00:02:00  102   104     g    2      4        # abs(100 - 104)
00:03:00  104   106     g    3      6        # abs(100 - 106)
00:04:00  106   105     r    1      1        # abs(106 - 105)
00:05:00  105   101     r    2      5        # abs(106 - 101)
00:06:00  101   102     g    1      1        # abs(101 - 102)
00:06:00  102   103     g    2      2        # abs(101 - 103)

Я прочитал два других поста, которые близки, но не совсем нашли решение, которое я ищу:

получить первое и последнее значения в группе

Количество панд последовательных вхождений в предыдущих строках

Я использую df.groupby((df['color'] != df['color'].shift()).cumsum()), чтобы сгруппировать строки по цвету свечи (так я рассчитал цвет и счетчик пробежек), и я могу получить первое и последнее значения группы, используя .agg(['first', 'last']).stack(), но это не позволяет мне применять разницу на строку исходного кадра данных.

1 Ответ

0 голосов
/ 03 мая 2018

Вы ищете groupby? Для большей надежности, следуйте совету @ Вэнь в комментариях, выполните groupby, используя трюк cumsum:

df['run_length'] = df.groupby(
    df['color'].ne(df['color'].shift()).cumsum()
).open.transform('first').sub(df.close).abs()

df    
       date  open  close color  run  run_length
0  00:01:00   100    102     g    1           2
1  00:02:00   102    104     g    2           4
2  00:03:00   104    106     g    3           6
3  00:04:00   106    105     r    1           1
4  00:05:00   105    101     r    2           5
5  00:06:00   101    102     g    1           1
6  00:06:00   102    103     g    2           2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...