maxframe.dataframe.DataFrame.combine#

DataFrame.combine(other, func, fill_value=None, overwrite=True)#

与另一个 DataFrame 进行列式合并。

使用 func 对两个 DataFrame 的列进行逐元素合并。结果 DataFrame 的行索引和列索引是两个 DataFrame 的并集。

参数:
  • other (DataFrame) -- 要按列合并的 DataFrame。

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

  • fill_value (scalar value, default None) -- 在将任何列传递给合并函数之前用于填充 NaN 的值。

  • overwrite (bool, default True) -- 如果为 True,则 self 中不存在于 other 的列将被 NaN 覆盖。

返回:

提供的 DataFrame 的合并结果。

返回类型:

DataFrame

参见

DataFrame.combine_first

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

示例

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

>>> import maxframe.tensor as mt
>>> import maxframe.dataframe as md
>>> df1 = md.DataFrame({'A': [0, 0], 'B': [4, 4]})
>>> df2 = md.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).execute()
   A  B
0  0  3
1  0  3

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

>>> df1 = md.DataFrame({'A': [5, 0], 'B': [2, 4]})
>>> df2 = md.DataFrame({'A': [1, 1], 'B': [3, 3]})
>>> df1.combine(df2, mt.minimum).execute()
   A  B
0  1  2
1  0  3

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

>>> df1 = md.DataFrame({'A': [0, 0], 'B': [None, 4]})
>>> df2 = md.DataFrame({'A': [1, 1], 'B': [3, 3]})
>>> df1.combine(df2, take_smaller, fill_value=-5).execute()
   A    B
0  0 -5.0
1  0  4.0

但是,如果两个 DataFrame 中相同位置的元素都是 None,则该 None 会被保留

>>> df1 = md.DataFrame({'A': [0, 0], 'B': [None, 4]})
>>> df2 = md.DataFrame({'A': [1, 1], 'B': [None, 3]})
>>> df1.combine(df2, take_smaller, fill_value=-5).execute()
    A    B
0  0 -5.0
1  0  3.0

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

>>> df1 = md.DataFrame({'A': [0, 0], 'B': [4, 4]})
>>> df2 = md.DataFrame({'B': [3, 3], 'C': [-10, 1], }, index=[1, 2])
>>> df1.combine(df2, take_smaller).execute()
     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).execute()
     A    B     C
0  0.0  NaN   NaN
1  0.0  3.0 -10.0
2  NaN  3.0   1.0

演示传入的 DataFrame 的优先级。

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