РЕДАКТИРОВАТЬ:
В версии pandas 0.24.1 возникает ошибка:
print (dataframe)
Col
Jan 1
Apr 2
Jul 3
Oct 4
print (dataframe.index.is_monotonic_increasing)
False
L = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
print (dataframe.reindex(L, method='ffill'))
ValueError: индекс должен быть монотонным при увеличении или уменьшении
И в документах - DataFrame.reindex
:
метод : {Нет, 'обратная засыпка' / 'bfill', 'pad' / 'ffill', 'near'}
Метод, используемый для заполнения дырок в переиндексированном DataFrame.Обратите внимание: это применимо только к DataFrames / Series с монотонно увеличивающимся / убывающим индексом.
Нет (по умолчанию): не заполнять пробелы pad / ffill: распространять последнее действительное наблюдение вперед до следующей действительной засыпки / bfill: использовать следующее действительное наблюдение, чтобы заполнить пробел, ближайший: использовать ближайшие действительные наблюдения, чтобы заполнить пробел
Второй рабочий вариант:
print (dataframe.reindex(L).ffill())
Col
Jan 1.0
Feb 1.0
Mar 1.0
Apr 2.0
May 2.0
Jun 2.0
Jul 3.0
Aug 3.0
Sep 3.0
Oct 4.0
Nov 4.0
Dec 4.0
Примечание - Не используйте list
какпеременная, потому что Python зарезервированное слово (встроенные).
Разница в том, если пропущенные значения находятся в столбце до reindex
:
dataframe = pd.DataFrame({'col':[0,2,np.nan,5,np.nan]}, index=[1,3,5,6,8])
print (dataframe)
col
1 0.0
3 2.0
5 NaN
6 5.0
8 NaN
print (dataframe.index.is_monotonic_increasing)
True
Если использовать параметр, то вперед заполнить только добавленные строки, здесь 1, 4,7 строки.
Если цепочка ffill
, то создаются пропущенные значения и все данные Серии заполняются в прямом направлении:
L = range(10)
df = pd.concat([dataframe.reindex(L, method='ffill'),
dataframe.reindex(L),
dataframe.reindex(L).ffill()],
keys=('parameter','only_reindex','chained'), axis=1)
print (df)
parameter only_reindex chained
col col col
0 NaN NaN NaN
1 0.0 0.0 0.0
2 0.0 NaN 0.0
3 2.0 2.0 2.0
4 2.0 NaN 2.0
5 NaN NaN 2.0
6 5.0 5.0 5.0
7 5.0 NaN 5.0
8 NaN NaN 5.0
9 NaN NaN 5.0
Если результат пропущенных значений не совпадает:
dataframe = pd.DataFrame({'col':[0,2,8,5,9]}, index=[1,3,5,6,8])
print (dataframe)
col
1 0
3 2
5 8
6 5
8 9
print (dataframe.index.is_monotonic_increasing)
True
L = range(10)
df = pd.concat([dataframe.reindex(L, method='ffill'),
dataframe.reindex(L),
dataframe.reindex(L).ffill()],
keys=('parameter','only_reindex','chained'), axis=1)
print (df)
parameter only_reindex chained
col col col
0 NaN NaN NaN
1 0.0 0.0 0.0
2 0.0 NaN 0.0
3 2.0 2.0 2.0
4 2.0 NaN 2.0
5 8.0 8.0 8.0
6 5.0 5.0 5.0
7 5.0 NaN 5.0
8 9.0 9.0 9.0
9 9.0 NaN 9.0