Заполнить столбцы значений nan предыдущим значением, умноженным на константу

У меня есть df с некоторыми столбцами, заканчивающимися несколькими значениями nan. Я хотел бы использовать fillna(method='ffill') или что-то подобное, чтобы умножить каждое значение nan col на предыдущее значение * некоторую константу из другого df. Однако простое использование следующего не работает. Прежде чем переходить к следующему, нужно будет вычислить значение каждого столбца, в этом проблема?

df_new = df.fillna(method='ffill') * constant 

person Squidf20    schedule 26.01.2021    source источник


Ответы (1)


Интересный вопрос! Это не векторизованное решение, но оно будет работать по столбцам.

Сначала настройте данные для тестов — установите индекс на дату, чтобы мы не полагались на номер индекса, чтобы помочь

A = [np.nan, np.nan, 5.5, 5.7, 5.9, 6.1, 6.0, 5.9, np.nan, np.nan, np.nan,15.0]

df = pd.DataFrame({'A': A}, index=pd.date_range(start='2010', periods=len(A), freq="QS"))

дает

            A
2010-01-01  NaN
2010-04-01  NaN
2010-07-01  5.5
2010-10-01  5.7
2011-01-01  5.9
2011-04-01  6.1
2011-07-01  6.0
2011-10-01  5.9
2012-01-01  NaN
2012-04-01  NaN
2012-07-01  NaN
2012-10-01  15.0

а потом

for id in df[df.A.isnull() == True].index:
    df.loc[id, 'A'] = 1.025 * df.A.shift().loc[id] 

дает

            A
2010-01-01  NaN
2010-04-01  NaN
2010-07-01  5.500000
2010-10-01  5.700000
2011-01-01  5.900000
2011-04-01  6.100000
2011-07-01  6.000000
2011-10-01  5.900000
2012-01-01  6.047500
2012-04-01  6.198687
2012-07-01  6.353655
2012-10-01  15.000000

теперь вам нужно перебрать столбцы, которые вы хотите заполнить вперед

person Paul Brennan    schedule 26.01.2021