Python Pandas Условный расчет строка за строкой - PullRequest
4 голосов
/ 28 февраля 2020

У меня есть набор данных со значениями в столбце A, представляющих счет. Я хочу вычислить столбец B, где я могу видеть, как долго оценка равна или выше, чем в последнем ряду. Если значение ниже, тогда я установлю значение в столбце B для этой строки равным 0.

Я пробовал следующее:

df = pd.DataFrame({'A': [140, 145,148, 150, 100, 105, 106]})

df['B'] = 0
df.loc[df['A'].diff() >= 0, 'B'] = df['B'].shift() + 1

В результате получается следующее

    A       B
0   140     0.0
1   145     1.0
2   148     1.0
3   150     1.0
4   100     0.0
5   105     1.0
6   106     1.0

Итак, я понимаю, что условие проверяется для каждой строки, но, к сожалению, кажется, что оно рассчитывается все вместе, так что оно не увеличивает значение B, как ожидалось, поскольку во время вычисления для каждой строки значение строки -1 .shift() по-прежнему 0.

Как мне это сделать, чтобы получить следующий результат?:

    A       B
0   140     0
1   145     1
2   148     2
3   150     3
4   100     0
5   105     1
6   106     2

1 Ответ

3 голосов
/ 28 февраля 2020

Вам нужно cumsum для идентификации блоков и groupby().cumcount() для перечисления каждого блока:

s = df['A'].diff().ge(0)
df['B'] = s.groupby((~s).cumsum()).cumcount()

Вывод:

     A  B
0  140  0
1  145  1
2  148  2
3  150  3
4  100  0
5  105  1
6  106  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...