pandas 1.4.2

ParametersReturnsBackRef
combine(self, other: 'DataFrame', func, fill_value=None, overwrite: 'bool' = True) -> 'DataFrame'

Combines a DataFrame with other DataFrame using func to element-wise combine columns. The row and column indexes of the resulting DataFrame will be the union of the two.

Parameters

other : DataFrame

The DataFrame to merge column-wise.

func : function

Function that takes two series as inputs and return a Series or a scalar. Used to merge the two dataframes column by columns.

fill_value : scalar value, default None

The value to fill NaNs with prior to passing any column to the merge func.

overwrite : bool, default True

If True, columns in :None:None:`self` that do not exist in other will be overwritten with NaNs.

Returns

DataFrame

Combination of the provided DataFrames.

Perform column-wise combine with another DataFrame.

See Also

DataFrame.combine_first

Combine two DataFrame objects and default to non-null values in frame calling the method.

Examples

Combine using a simple function that chooses the smaller column.

This example is valid syntax, but we were not able to check execution
>>> df1 = pd.DataFrame({'A': [0, 0], 'B': [4, 4]})
... df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
... take_smaller = lambda s1, s2: s1 if s1.sum() < s2.sum() else s2
... df1.combine(df2, take_smaller) A B 0 0 3 1 0 3

Example using a true element-wise combine function.

This example is valid syntax, but we were not able to check execution
>>> df1 = pd.DataFrame({'A': [5, 0], 'B': [2, 4]})
... df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
... df1.combine(df2, np.minimum) A B 0 1 2 1 0 3

Using :None:None:`fill_value` fills Nones prior to passing the column to the merge function.

This example is valid syntax, but we were not able to check execution
>>> df1 = pd.DataFrame({'A': [0, 0], 'B': [None, 4]})
... df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
... df1.combine(df2, take_smaller, fill_value=-5) A B 0 0 -5.0 1 0 4.0

However, if the same element in both dataframes is None, that None is preserved

This example is valid syntax, but we were not able to check execution
>>> df1 = pd.DataFrame({'A': [0, 0], 'B': [None, 4]})
... df2 = pd.DataFrame({'A': [1, 1], 'B': [None, 3]})
... df1.combine(df2, take_smaller, fill_value=-5) A B 0 0 -5.0 1 0 3.0

Example that demonstrates the use of :None:None:`overwrite` and behavior when the axis differ between the dataframes.

This example is valid syntax, but we were not able to check execution
>>> df1 = pd.DataFrame({'A': [0, 0], 'B': [4, 4]})
... df2 = pd.DataFrame({'B': [3, 3], 'C': [-10, 1], }, index=[1, 2])
... df1.combine(df2, take_smaller) A B C 0 NaN NaN NaN 1 NaN 3.0 -10.0 2 NaN 3.0 1.0
This example is valid syntax, but we were not able to check execution
>>> df1.combine(df2, take_smaller, overwrite=False)
     A    B     C
0  0.0  NaN   NaN
1  0.0  3.0 -10.0
2  NaN  3.0   1.0

Demonstrating the preference of the passed in dataframe.

This example is valid syntax, but we were not able to check execution
>>> df2 = pd.DataFrame({'B': [3, 3], 'C': [1, 1], }, index=[1, 2])
... df2.combine(df1, take_smaller) A B C 0 0.0 NaN NaN 1 0.0 3.0 NaN 2 NaN 3.0 NaN
This example is valid syntax, but we were not able to check execution
>>> df2.combine(df1, take_smaller, overwrite=False)
     A    B   C
0  0.0  NaN NaN
1  0.0  3.0 1.0
2  NaN  3.0 1.0
See :

Back References

The following pages refer to to this document either explicitly or contain code examples using this.

pandas.core.frame.DataFrame.combine_first

Local connectivity graph

Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.

Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)

SVG is more flexible but power hungry; and does not scale well to 50 + nodes.

All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them


File: /pandas/core/frame.py#7200
type: <class 'function'>
Commit: