df.combine() 是如何工作的?

4
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 从哪里得来?

3
дЅ иѓЅжЏђдѕ›take_smallerзљ„д»Јз Ѓеђ—пјџ - Michael Szczesny
2个回答

6

来自文档的示例:

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替换为指定的值。


4

我猜你是在指文档示例

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]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接