DataFrame.align(other, join='outer', axis=None, level=None, copy=None, fill_value=None) Series.align(other, join='outer', axis=None, level=None, copy=None, fill_value=None)
join='outer' - тип выполняемого выравнивания:
left: использует только ключи из левой таблицы, сохраняет порядок ключей.right: использует только ключи из правой таблицы, сохраняет порядок ключей.outer: используйте объединение ключей из обоих таблиц, отсортирует ключи лексикографически.inner: используйте пересечение ключей из обоих таблиц, сохраняет порядок левых ключей.axis=None - выравнять по индексу (0), столбцам (1) или обоим (None).
level=None - соответствовать значениям индекса на переданном уровне MultiIndex.
fill_value=None - значение, используемое для отсутствующих значений. По умолчанию NaN, но может быть любым "совместимым" значением.
copy=None - копирует базовые данные.
Ключевой аргумент
copyизменит поведение вpandas 3.0. Копирование при записи будет включено по умолчанию, что означает, что все методы сcopyбудут использовать механизм отложенного копирования. Ключевое слово copy будет удалено в будущей версииpandas. Эту функциональность уже можно включить установивpd.options.mode.copy_on_write = True
(Series/DataFrame, other type).align() объектов Series/DataFrameМетод DataFrame.align() и Series.align() модуля выравнивает два объекта по их осям axis с помощью указанного метода соединения join. Метод соединения указывается для каждого индекса оси.
Series/DataFrame по осям:df = pd.DataFrame( [[1, 2, 3, 4], [6, 7, 8, 9]], columns=["D", "B", "E", "A"], index=[1, 2] ) other = pd.DataFrame( [[10, 20, 30, 40], [60, 70, 80, 90], [600, 700, 800, 900]], columns=["A", "B", "C", "D"], index=[2, 3, 4], ) >>> df # D B E A # 1 1 2 3 4 # 2 6 7 8 9 >>> other # A B C D # 2 10 20 30 40 # 3 60 70 80 90 # 4 600 700 800 900
Выравниваем по столбцам:
>>> left, right = df.align(other, join="outer", axis=1) >>> left # A B C D E # 1 4 2 NaN 1 3 # 2 9 7 NaN 6 8 >>> right # A B C D E # 2 10 20 30 40 NaN # 3 60 70 80 90 NaN # 4 600 700 800 900 NaN
Можно выровнять индекс:
>>> left, right = df.align(other, join="outer", axis=0) >>> left # D B E A # 1 1.0 2.0 3.0 4.0 # 2 6.0 7.0 8.0 9.0 # 3 NaN NaN NaN NaN # 4 NaN NaN NaN NaN >>> right # A B C D # 1 NaN NaN NaN NaN # 2 10.0 20.0 30.0 40.0 # 3 60.0 70.0 80.0 90.0 # 4 600.0 700.0 800.0 900.0
Наконец, значение по умолчанию axis=None будет выравнивать как по индексу, так и по столбцам:
>>> left, right = df.align(other, join="outer", axis=None) >>> left # A B C D E # 1 4.0 2.0 NaN 1.0 3.0 # 2 9.0 7.0 NaN 6.0 8.0 # 3 NaN NaN NaN NaN NaN # 4 NaN NaN NaN NaN NaN >>> right # A B C D E # 1 NaN NaN NaN NaN NaN # 2 10.0 20.0 30.0 40.0 NaN # 3 60.0 70.0 80.0 90.0 NaN # 4 600.0 700.0 800.0 900.0 NaN