Pandas: заполнить нулевые значения последними доступными значениями и флагом - PullRequest
1 голос
/ 02 августа 2020

Я ищу logi c для вывода / обновления значений в столбце значений на основе флага Y. Обратите внимание на второе N, выделенное жирным шрифтом. Мы не будем заполнять значения для следующих двух Y, так как последнее значение N и оно равно нулю. Если N имеет значение, мы можем заполнить следующую строку Y.

Я пробовал использовать df_latest.loc [(df_latest ['flag'] == 'Y'), 'value'] = df_latest ['value' ] .fillna (method = 'ffill') Этот logi c не покрывает сценарий, когда N равно NULL, и он заполняет всю предыдущую строку NUll.

flag    value   new_val

Y           1       1 

Y           2       2

Y           NaN     2

N           3       3

Y           NaN     3

Y           5       5

N           NaN     NaN

Y           NaN     NaN

Y           NaN     NaN

N           6       6

Y           NaN     6

Y           NaN     6

Y           NaN     6

Y           NaN     6

Y           NaN     6

введите описание изображения здесь

1 Ответ

1 голос
/ 02 августа 2020

Мы можем использовать GroupBy.ffill для заполнения по группам, поэтому всякий раз, когда flag == N и value имеют значение null, он не будет заполнен, пока значение не станет отличным от нуля, чтобы заполнить только когда флаг Y вы можете использовать закомментированный код.

blocks = (df['flag'].eq('N') & df['value'].isnull()).cumsum()
df['new_val'] = df['value'].groupby(blocks).ffill()

# if you want fill only if flag is Y
#df['new_val'] = df['value'].fillna(df['value'].groupby(blocks)
#                                              .ffill()          
#                                              .where(df['flag'].eq('Y'))
#                                       )

print(df)

Вывод

   flag  value  new_val
0     Y    1.0      1.0
1     Y    2.0      2.0
2     Y    NaN      2.0
3     N    3.0      3.0
4     Y    NaN      3.0
5     Y    5.0      5.0
6     N    NaN      NaN
7     Y    NaN      NaN
8     Y    NaN      NaN
9     N    6.0      6.0
10    Y    NaN      6.0
11    Y    NaN      6.0
12    Y    NaN      6.0
13    Y    NaN      6.0
14    Y    NaN      6.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...