условно заполнить все последующие значения столбца данных - PullRequest
0 голосов
/ 07 октября 2018

Я хочу «заполнить вперед» значения нового столбца в DataFrame в соответствии с первым случаем выполнения условия.Вот базовый пример:

import pandas as pd
import numpy as np

x1 = [1,2,4,-3,4,1]

df1 = pd.DataFrame({'x':x1})

Я хотел бы добавить новый столбец в df1 - «условие» - где значение будет 1 при появлении отрицательного числа, иначе 0, но я бы хотел, чтобы оставшиеся значения столбца были установлены в 1, как только будет найдено отрицательное число

, поэтому я бы искал желаемый результат следующим образом:

    condition   x
0   0   1
1   0   2
2   0   4
3   1   -3
4   1   4
5   1   1

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Вы можете использовать логическую серию здесь:

df1['condition'] = (df1.index >= (df1['x'] < 0).idxmax()).astype(int)

print(df1)

   x  condition
0  1          0
1  2          0
2  4          0
3 -3          1
4  4          1
5  1          1
0 голосов
/ 07 октября 2018

Пока никто не использовал cummax:

In [165]: df1["condition"] = (df1["x"] < 0).cummax().astype(int)

In [166]: df1
Out[166]: 
   x  condition
0  1          0
1  2          0
2  4          0
3 -3          1
4  4          1
5  1          1
0 голосов
/ 07 октября 2018

Использование np.cumsum:

df1['condition'] = np.where(np.cumsum(np.where(df1['x'] < 0, 1, 0)) == 0, 0, 1)

Вывод:

   x  condition
0  1          0
1  2          0
2  4          0
3 -3          1
4  4          1
5  1          1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...