Создание нового столбца путем сброса cummin() другого столбца и условияPython

Программы на Python
Anonymous
Создание нового столбца путем сброса cummin() другого столбца и условия

Сообщение Anonymous »


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

импортировать панд как pd df = pd.DataFrame( { 'а': [98, 97, 100, 135, 103, 100, 105, 109, 130], 'б': [100, 103, 101, 105, 110, 120, 101, 150, 160] } ) И это желаемый результат. Я хочу создать столбец c:

а б в 0 98 100 100 1 97 103 100 2 100 101 100 3 135 105 100 4 103 110 110 5 100 120 110 6 105 101 101 7 109 150 150 8 130 160 150 Мне не так-то просто описать проблему на чистом английском языке, поскольку она немного сложна. c — это df.b.cummmin(), но при определенных условиях оно меняется. Описываю это построчно:

Процесс начинается с:

df['c'] = df.b.cummin() Условие изменения c:

cond = df.a.shift(1) > df.c.shift(1) Теперь важны те строки, для которых cond == True. Для этих строк df.c = df.b и cummin() из b СБРОСЫ.

Например, первый экземпляр cond — это строка 4. Таким образом, c изменится на 110 (другими словами, независимо от того, что такое b). А для строки 5 это cummin() из b из строки 4. Логика та же до конца.

Это одна из моих попыток. Но это не работает там, где срабатывает cond:

df['c'] = df.b.cummin() df.loc[df.a.shift(1) > df.c.shift(1), 'c'] = df.b ПС:

Принятый ответ подходит для этого примера. Но для моих реальных данных, которые намного больше, это сработало не так, как ожидалось. Я до сих пор не нашел в этом проблемы.

Однако мне очень нравится этот ответ, и он меня устраивает. Это просто и очень эффективно. Я не изменил принятый ответ, поскольку он имеет векторизованное решение.

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