У меня есть кадр данных pandas, из которых один столбец является датой, а другой содержит некоторое значение вместе с NaN. Пример, кадр данных приводится ниже -Замените NaN с некоторым кратным предыдущему значению в Pandas Dataframe
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':pd.date_range(start="01/01/2013",periods=6, freq="D"),'b': [1,np.nan,np.nan,4,np.nan,7]})
df
a b
2013-01-01 1
2013-01-02 NaN
2013-01-03 NaN
2013-01-04 4
2013-01-05 NaN
2013-01-05 7
Теперь я хочу, чтобы заполнить эту пренебрежимо малых с некоторым фиксированным множителем предыдущего значения, то есть выше кадра данных будет выглядеть следующим образом после преобразования, если фиксированный множитель 0.5-
a b
2013-01-01 1
2013-01-02 0.5
2013-01-03 0.25
2013-01-04 4
2013-01-05 2
2013-01-05 7
Один из способ сделать это было бы петлю над б, а затем использовать .loc
функцию, чтобы преобразовать его, то есть мы можем использовать ниже данный фрагмент кода
for i in range(df.shape[0]):
if np.isnan(df.loc[i, 'b']):
df.loc[i, 'b'] = df.loc[i-1, 'b']*0.5
Хотя это хорошо работает, но оно плохо масштабируется - требуется много времени. Таким образом, было бы очень полезно, если бы кто-то помог мне сделать это более эффективно, используя встроенную функцию pandas.
Спасибо!
Ваш код не работает, как он перепишет значения 'не являющихся NaN' с' 1' – EdChum
в результате фрагмент отличается от ожидаемого DataFrame после преобразования, пожалуйста, укажите ожидаемый DataFrame. –
Основываясь на вашем описании, почему не вторая в последней строке '2'? – EdChum