maxframe.dataframe.DataFrame.combine#
- DataFrame.combine(other, func, fill_value=None, overwrite=True)#
与另一个 DataFrame 进行列式合并。
使用 func 对两个 DataFrame 的列进行逐元素合并。结果 DataFrame 的行索引和列索引是两个 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