Метод reindex_like
Метод reindex_like применяется к DataFrame
и изменяет его индексы строк и столбцов так,
чтобы они совпадали с индексами другого
переданного DataFrame. Это удобно, когда
нужно привести несколько таблиц к единой
структуре индексов перед операциями сложения
или вычитания. Если в исходной таблице
отсутствуют какие-то индексы или столбцы,
для них будут вставлены значения NaN.
Первым параметром передается другой
DataFrame, чьи индексы будут использованы
в качестве эталона. Также можно передать
дополнительные параметры, такие как
method для способа заполнения пропусков,
copy для управления копированием
данных и limit для ограничения
количества заполнений.
Синтаксис
df.reindex_like(other_df[, method='fill', copy=True, limit=None])
Пример
Пусть у нас есть две таблицы с разными индексами строк и столбцов. Приведем индексы первой таблицы в соответствие со второй:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3],
'b': [4, 5, 6]
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'b': [10, 20],
'c': [30, 40]
}, index=[1, 3])
res = df1.reindex_like(df2)
print(res)
Результат выполнения кода:
a b
1 2.0 5
3 NaN NaN
Как видим, у результирующей таблицы индексы
стали [1, 3], столбцы ['a', 'b'].
Для индекса 3 по столбцам a и
b были вставлены значения NaN,
так как в исходной таблице такой строки не было.
Для индекса 1 значения сохранились.
Пример
Если индексы столбцов не совпадают, то в результирующей таблице появятся только те столбцы, которые есть в эталонной таблице:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [5, 6, 7, 8],
'c': [9, 10, 11, 12]
})
df2 = pd.DataFrame({
'b': [100, 200],
'd': [300, 400]
})
res = df1.reindex_like(df2)
print(res)
Результат выполнения кода:
b d
0 5.0 NaN
1 6.0 NaN
Из исходной таблицы были взяты только
две первых строки (поскольку в эталонной
таблице два индекса), и только столбец
b, так как столбца d в исходной
таблице нет.
Пример
Параметр method позволяет заполнять
пропуски значениями из ближайших индексов.
Например, используем метод ffill
(forward fill) для заполнения пропусков
сверху вниз:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [5, 6, 7, 8]
}, index=[0, 1, 2, 3])
df2 = pd.DataFrame({
'a': [10, 20],
'b': [30, 40]
}, index=[1, 3])
res = df1.reindex_like(df2, method='ffill')
print(res)
Результат выполнения кода:
a b
1 2.0 6
3 4.0 8
Индексы 1 и 3 присутствуют
в исходной таблице, поэтому значения
остались без изменений. Если бы были
пропуски, они бы заполнились предыдущими
значениями.
Пример
Также можно использовать параметр
fill_value для замены пропусков
конкретным значением, например 0:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3],
'b': [4, 5, 6]
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'a': [10, 20, 30],
'b': [40, 50, 60],
'c': [70, 80, 90]
}, index=[1, 2, 4])
res = df1.reindex_like(df2, fill_value=0)
print(res)
Результат выполнения кода:
a b c
1 2.0 5 0
2 3.0 6 0
4 0.0 0 0
Все отсутствующие значения были заменены
на 0. Столбец c полностью
заполнен нулями, так как его нет в исходной
таблице.
Смотрите также
-
метод
reindex,
который изменяет индексы по заданным спискам -
метод
align,
который выравнивает два объекта по индексам одновременно -
метод
combine_first,
который заполняет пропуски значениями из другого объекта -
метод
fillna,
который заполняет пропуски в таблице указанным способом