Я пытаюсь ffill()
значения в двух столбцах в df
на основе отдельного столбца. Я надеюсь продолжить заполнение, пока не будет выполнено условие. Используя df
ниже, где Val1
и Val2
равны C
, я хочу заполнить последующие строки, пока строки в Code
не начнутся с ['FR','GE','GA']
.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'Code' : ['CA','GA','YA','GE','XA','CA','YA','FR','XA'],
'Val1' : ['A','B','C','A','B','C','A','B','C'],
'Val2' : ['A','B','C','A','B','C','A','B','C'],
})
mask = (df['Val1'] == 'C') & (df['Val2'] == 'C')
cols = ['Val1', 'Val2']
df[cols] = np.where(mask, df[cols].ffill(), df[cols])
Предполагаемый вывод:
Code Val1 Val2
0 CA A A
1 GA B B
2 YA C C
3 GE A A
4 XA B B
5 CA C C
6 YA C C
7 FR B B
8 XA C C
Примечание. Строки в Code
сокращены до двух символов, но длиннее в моем наборе данных, поэтому я надеюсь использовать startswith