Заполнение панд значений NA по горизонтали, но ограничено только одним значением прямого заполнения - PullRequest
2 голосов
/ 27 сентября 2019

Я хочу заполнить значения вперед по горизонтали, но ограничено только одним значением заполнения.

См. Кадры ниже: dfa имеет некоторые пробелы, которые необходимо заполнить.Я хочу результаты как показано в dfb.

(Обратите внимание на .T в конце строк, транспонируйте данные по горизонтали.)

Однако dfa.fillna(0, limit=1, axis=1) заполняет все ячейки в строке Name, тогда как столбцы 5и 6 (т.е. два столбца слева от 7 в строке Name) должны оставаться NaN.

import pandas as pd
import numpy as np
dfa = pd.DataFrame({'Name':[1,      np.nan,      3, np.nan, np.nan, np.nan,      7, np.nan], 
                    'Age': [np.nan,      2, np.nan,      4, np.nan,      6, np.nan,      8]}).T
dfb = pd.DataFrame({'Name':[1,           0,      3,      0, np.nan, np.nan,      7,      0],                
                    'Age': [np.nan,      2,      0,      4,      0,      6,      0,      8]}).T
dfc = dfa.fillna(0, limit=1, axis=1)

1 Ответ

2 голосов
/ 27 сентября 2019

Одна идея - использовать прямое заполнение для маски, а затем заменить DataFrame.mask связанными условиями на &:

m = dfa.ffill(limit=1, axis=1).isna()
print (m)
          0      1      2      3      4      5      6      7
Name  False  False  False  False   True   True  False  False
Age    True  False  False  False  False  False  False  False

dfc = dfa.mask(dfa.isna() & ~m, 0)

Или сначала заменить все NaN с, а затемсоздать NaN s по условию:

dfc = dfa.fillna(0).mask(m)

print (dfc)
        0    1    2    3    4    5    6    7
Name  1.0  0.0  3.0  0.0  NaN  NaN  7.0  0.0
Age   NaN  2.0  0.0  4.0  0.0  6.0  0.0  8.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...