这可能是一个错误,但它也可能是我失踪的大熊猫的微妙之处。我正在组合两个数据帧,结果的索引没有排序。奇怪的是,我从来没有见过一个单独的combine_first实例,它无法保持索引的排序。
>>> a1
X Y
DateTime
2012-11-06 16:00:11.477563 8 80
2012-11-06 16:00:11.477563 8 63
>>> a2
X Y
DateTime
2012-11-06 15:11:09.006507 1 37
2012-11-06 15:11:09.006507 1 36
>>> a1.combine_first(a2)
X Y
DateTime
2012-11-06 16:00:11.477563 8 80
2012-11-06 16:00:11.477563 8 63
2012-11-06 15:11:09.006507 1 37
2012-11-06 15:11:09.006507 1 36
>>> a2.combine_first(a1)
X Y
DateTime
2012-11-06 16:00:11.477563 8 80
2012-11-06 16:00:11.477563 8 63
2012-11-06 15:11:09.006507 1 37
2012-11-06 15:11:09.006507 1 36
我可以重现,所以我很乐意接受建议。关于正在发生的事情的猜测是最受欢迎的。
答案 0 :(得分:1)
combine_first
函数使用index.union
来组合索引并对其进行排序。 index.union
docstring声明它只在可能的情况下进行排序,因此combine_first
不一定会按设计返回排序结果。
对于非单调索引,index.union
尝试排序,但如果存在异常则返回未排序的结果。我不知道这是不是一个bug,但是index.union
甚至没有尝试对单调索引进行排序,例如你的例子中的日期时间索引。
我在GitHub上打开了一个问题,但我想你现在应该为任何日期时间索引执行a2.combine_first(a1).sort_index()
。
更新:此错误现已在GitHub上修复
答案 1 :(得分:0)
你真的想要使用.append()
吗?
尝试: -
a2.append(a1)
combine_first
实际上不是append
操作。见 - http://pandas.pydata.org/pandas-docs/dev/basics.html?highlight=combine_first#combining-overlapping-data-sets:-
偶尔出现的问题是两个相似数据的组合 设置一个中的值优先于另一个中的值。一个例子 将是代表特定经济指标的两个数据系列 其中一个被认为是“更高质量”。但是,更低 质量系列可能会在历史上延伸或有更多 完整的数据覆盖。因此,我们想结合两个 DataFrame对象,其中一个DataFrame中缺少值 条件性地填充来自另一个的相同标记的值 数据帧。
append
为http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.append.html?highlight=append
将其他列添加到此框架的列和索引的末尾, 返回一个新对象。不在此框架中的列将添加为新的 列。