3

这可能是一个错误,但也可能是我错过的熊猫的一个微妙之处。我正在组合两个数据框,结果的索引未排序。奇怪的是,我从未见过一个无法维护之前排序的索引的 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

我可以复制,所以我很乐意接受建议。最欢迎猜测发生了什么。

4

2 回答 2

1

combine_first函数用于index.union对索引进行组合和排序。index.union文档字符串指出它仅在可能的情况下进行排序,因此不一定combine_first会按设计返回排序结果。

对于非单调索引,index.union尝试排序,但如果出现异常则返回未排序的结果。我不知道这是否是一个错误,但index.union甚至没有尝试对单调索引进行排序,例如您的示例中的日期时间索引。

我在GitHub 上打开了一个问题,但我想你现在应该a2.combine_first(a1).sort_index()为任何日期时间索引做。

更新:此错误现已在 GitHub 上修复

于 2012-11-08T11:28:24.480 回答
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 中的缺失值有条件地用来自另一个 DataFrame 的类似标记值填充。

虽然appendhttp://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.append.html?highlight=append

将 other 的列附加到此帧的列和索引的末尾,返回一个新对象。不在此框架中的列将添加为新列。

于 2012-11-08T00:55:25.663 回答