python - 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从何而来?
解决方案
来自文档中的示例
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 的值。
推荐阅读
- python - 需要更新每一行的数组或数据帧上的 Python 操作
- drupal - 无法检查树枝中的标题值,Drupal 8
- mysql - 将两个具有多个条件和一个最大条件的 sql 表组合在一起的最佳方法
- java - 多重 Map 的第二个键值对不考虑作为 httpHeader spring 4.1.7 中的 Header
- apache-spark - 无法在 Databricks 中创建 H2OContext - 使用 pysparkling
- c# - 如何对数据进行分组。我想显示一个列表,单击时包含 foo 的数据,单击时包含 boo 的数据
- python - Matplotlib pyplot:绘图数组混合了 y 轴标签
- r - 从 purrr 的 pmap() 调用 var() 返回 NA
- r - 对于列中的每个唯一值,找到最少 4 个日期
- javascript - Omeka 中的 JavaScript 手风琴