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)