pandas.DataFrame.combine#

DataFrame.combine(other, func, fill_value=None, overwrite=True)[源代码]#

与另一个 DataFrame 进行列组合。

使用 func 对 DataFrame 和 other DataFrame 进行逐元素合并,以合并列。结果 DataFrame 的行和列索引将是两者的并集。

参数:
otherDataFrame

要按列合并的 DataFrame。

func函数

接受两个 Series 作为输入并返回一个 Series 或标量的函数。用于逐列合并两个 DataFrame。

fill_value标量值,默认为 None

在将任何列传递给合并函数之前,用于填充 NaN 的值。

overwritebool, 默认 True

如果为 True,则 self 中不存在于 other 的列将被 NaN 覆盖。

返回:
DataFrame

提供的 DataFrame 的组合。

另请参阅

DataFrame.combine_first

合并两个 DataFrame 对象,并默认使用调用方法的 DataFrame 中的非空值。

示例

使用一个简单的函数来选择较小的列进行合并。

>>> 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

使用一个真正的逐元素合并函数的示例。

>>> 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

使用 fill_value 在将列传递给合并函数之前填充 None。

>>> 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

演示 overwrite 的使用以及当 DataFrame 之间轴不同时的行为的示例。

>>> 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
>>> 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

演示传入 DataFrame 的优先顺序。

>>> df2 = pd.DataFrame(
...     {
...         "B": [3, 3],
...         "C": [1, 1],
...     },
...     index=[1, 2],
... )
>>> df2.combine(df1, take_smaller)
     B    C   A
0  NaN  NaN 0.0
1  3.0  NaN 0.0
2  3.0  NaN NaN
>>> df2.combine(df1, take_smaller, overwrite=False)
     B    C   A
0  NaN  NaN 0.0
1  3.0  1.0 0.0
2  3.0  1.0 NaN