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 从哪里得来?
来自文档的示例:
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
这个很好用。
然而,如果你使用fill_value=-5
,那么第一个数据框中第二个系列的总和会变小,因为fill_value
首先填充NaN,然后再进行比较。(-5+4) < (3+0),因此返回-5和4
。
fill_value
标量值,默认为None 在将任何列传递给合并函数之前,将NaN替换为指定的值。
我猜你是在指文档示例
take_smaller = lambda s1, s2: s1 if s1.sum() < s2.sum() else s2
如果是这样的情况
在这里使用 fill_value=-5
,因此传入函数的列B
将为
[-5,4]
和 [3,0]
所以 -5 + 4 = -1
小于 3 + 0 = 3
因此返回[-5, 4]
。
take_smaller
зљ„д»Јз Ѓеђ—пјџ - Michael Szczesny