Как я могу фильтровать группы, сравнивая первое значение каждой группы и последнее значение cummax, которое изменяется уPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу фильтровать группы, сравнивая первое значение каждой группы и последнее значение cummax, которое изменяется у

Сообщение Anonymous »

Мой фрейм данных:

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

import pandas as pd
df = pd.DataFrame(
{
'group': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'e', 'e', 'e'],
'num': [1, 2, 3, 1, 12, 12, 13, 2, 4, 2, 5, 6, 10, 20, 30]
}
)
Ожидаемый результат — три группы сверху df

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

  group  num
0      a    1
1      a    2
2      a    3

group  num
6      c   13
7      c    2
8      c    4

group  num
12     e   10
13     e   20
14     e   30
Логика:
Я хочу сравнить первое значение каждой группы с последним cummax столбца num. Я могу лучше объяснить этот код:

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

df['last_num'] = df.groupby('group')['num'].tail(1)
df['last_num'] = df.last_num.ffill().cummax()
Но я думаю, что мне действительно нужен этот желаемый_cummax:

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

   group  num  last_num   desired_cummax
0      a    1       NaN    3
1      a    2       NaN    3
2      a    3       3.0    3
3      b    1       3.0    3
4      b   12       3.0    3
5      b   12      12.0    3
6      c   13      12.0    3
7      c    2      12.0    3
8      c    4      12.0    4
9      d    2      12.0    4
10     d    5      12.0    4
11     d    6      12.0    4
12     e   10      12.0    4
13     e   20      12.0    4
14     e   30      30.0    30
Мне не нужен новый cummax, если первое значение num для каждой группы меньше последнего_num.Например, для группы b первое значение num равно 1. Поскольку оно меньше последнего_num, когда оно достигает конца группы b< /code> не следует ставить 12. Оно все равно должно быть 3.
Теперь для группы c, поскольку ее первое значение больше, чем last_num, когда она достигает конца группы c, будет установлен новый cummax.
После этого я хочу отфильтровать группы. Если df.num.iloc[0] > df.desired_cummax.iloc[0]
Обратите внимание, что первая группа должна быть в ожидаемом выводе, несмотря ни на что.
Может быть, есть лучший подход к решению этой проблемы. Но я думаю, что это может сработать.
Моя попытка заключалась в создании Last_num, но я не знаю, как продолжить.

Подробнее здесь: https://stackoverflow.com/questions/786 ... d-the-last
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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