Как заменить этикетку при обратной заправке - PullRequest
0 голосов
/ 18 июня 2019

У меня есть следующий набор данных:

index           Label           Value
0                NO              12
1                NO              13
2                NO              5
3                NO              8
4                NO              12
5                YES             10
6                YES             13
7                YES             9
8                YES             18
9                NO              12
10               NO              10
11               NO              7

Моя цель состоит в том, чтобы заменить последние три метки NO перед первой меткой YES на YES.

Итак, я хотел бы получить следующие данные:

index           Label           Value
0                NO              12
1                NO              13
2                YES             5
3                YES             8
4                YES             12
5                YES             10
6                YES             13
7                YES             9
8                YES             18
9                NO              12
10               NO              10
11               NO              7

Таким образом, индексы 2,3 и 4 превратились в метки YES

1 Ответ

2 голосов
/ 18 июня 2019

where + bffill

df['Label'] = df.Label.where(df.Label.eq('YES')).bfill(limit=3).fillna(df.Label)

    index Label  Value
0       0    NO     12
1       1    NO     13
2       2   YES      5
3       3   YES      8
4       4   YES     12
5       5   YES     10
6       6   YES     13
7       7   YES      9
8       8   YES     18
9       9    NO     12
10     10    NO     10
11     11    NO      7
...