首页 > 解决方案 > df.combine() 是如何工作的?

问题描述

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

上面的代码产生了结果。4.0从何而来?

标签: pythonpandas

解决方案


来自文档中的示例

take_smaller = lambda s1, s2: s1 if s1.sum() < s2.sum() else s2

这表示如果 df1 中的系列总和小于 df2 中系列的总和,则从 df1 返回系列,否则从 df2 返回系列。

所以当你这样做时:

df1.combine(df2, take_smaller)

   A    B
0  0  3.0
1  0  0.0

这工作正常。

但是,当您执行 a 时fill_value=-5,第一个数据帧中的第二个系列的总和会变小,因为fill_value首先填充 NaN 然后进行比较。(-5+4) < (3+0) ,因此-5 and 4返回。

fill_value 标量值,默认值 None 在将任何列传递给合并函数之前填充 NaN 的值。


推荐阅读