DataFrame.combine(other, func, fill_value=None, overwrite=True)
基于传递的函数执行与另一个DataFrame的逐列组合。
使用func将DataFrame与其他 DataFrame 组合到按元素组合的列。生成的DataFrame的行索引和列索引将是两者的并集。
参数: | other : DataFrame 要按列合并的DataFrame。 func : 功能 将两个系列作为输入并返回一个Series或一个标量的函数。用于逐列合并两个数据帧。 fill_value : 标量值,默认 在将任何列传递给合并函数之前填充NaN的值。 overwrite : 如果为true,列自我不存在在其他将与NaN的覆盖。 |
返回: | 结果 : DataFrame |
例子
1)使用自定义函数进行组合
import pandas as pd import numpy as np # 创建两个示例DataFrame df1 = pd.DataFrame({ 'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8] }) df2 = pd.DataFrame({ 'A': [5, 6, 7, 8], 'B': [1, 2, 3, 4] }) # 定义自定义函数:取两个元素中的较大值 def combiner(x, y): return np.where(pd.isna(x), y, np.where(pd.isna(y), x, np.maximum(x, y))) # 使用combine方法进行组合 combined_df = df1.combine(df2, combiner) print("Combined DataFrame:") print(combined_df)
2)使用fill_value参数
import pandas as pd import numpy as np # 创建两个示例DataFrame df1 = pd.DataFrame({ 'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8] }) df2 = pd.DataFrame({ 'A': [5, 6, 7, 8], 'B': [1, 2, 3, 4] }) # 定义自定义函数:取两个元素中的较大值 def combiner(x, y): return np.where(pd.isna(x), y, np.where(pd.isna(y), x, np.maximum(x, y))) # 使用combine方法进行组合,并指定fill_value combined_df = df1.combine(df2, combiner, fill_value=0) print("Combined DataFrame with fill_value=0:") print(combined_df)
3)使用overwrite参数
import pandas as pd import numpy as np # 创建两个示例DataFrame df1 = pd.DataFrame({ 'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8] }) df2 = pd.DataFrame({ 'A': [5, 6, 7, 8], 'B': [1, 2, 3, 4] }) # 定义自定义函数:取两个元素中的较大值 def combiner(x, y): return np.where(pd.isna(x), y, np.where(pd.isna(y), x, np.maximum(x, y))) # 使用combine方法进行组合,并设置overwrite为False combined_df = df1.combine(df2, combiner, overwrite=False) print("Combined DataFrame with overwrite=False:") print(combined_df)
4)使用选择较小列的简单函数进行组合
import pandas as pd # 创建两个示例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 # 使用combine方法进行组合 combined_df = df1.combine(df2, take_smaller) print("Combined DataFrame (take_smaller):") print(combined_df)
5)使用逐元素组合函数
import pandas as pd import numpy as np # 创建两个示例DataFrame df1 = pd.DataFrame({'A': [5, 0], 'B': [2, 4]}) df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]}) # 使用np.minimum进行逐元素组合 combined_df = df1.combine(df2, np.minimum) print("Combined DataFrame (np.minimum):") print(combined_df)