【问题标题】:Sorting a DataFrame such that NA values on the first sort column would be at the end regardless of the secondary sort columns对 DataFrame 进行排序,以使第一个排序列上的 NA 值位于末尾,而不管辅助排序列如何
【发布时间】:2015-05-15 03:55:32
【问题描述】:

我正在使用 DataFrame.sort 并针对将所有 NA 值推到末尾的默认行为。

问题在于,当您添加辅助排序列时,第一个排序列上的 NA 值的行为与非 NA 值不同。显然,如果您在第一列中有 NA,如果它们不是 NA,它将被辅助列覆盖。

例如:

In [1]: df = DataFrame([[1, 1], [None, 0]])

In [2]: df.sort([0])
Out[2]: 
    0  1
0   1  1
1 NaN  0

In [3]: df.sort([0, 1])
Out[3]: 
    0  1
1 NaN  0
0   1  1

最后的排序展示了不受欢迎的行为:第一个排序列 (0) 上的值是 NaN,因此记录 1 应该在末尾。不是,因为显然第二列 (1) 优先。

有没有什么方法可以对df 进行排序,这样辅助排序列将仅用于解决第一个排序列之间的相等问题,同时仍将所有 NA 保留在末尾,而不管辅助列的值如何?

【问题讨论】:

  • 你有哪个版本的熊猫?我无法用 0.15.2 复制第二个示例
  • 是的,这在 pandas 0.16.0 上也可以正常工作
  • @chrisaycock 这是 0.13.1
  • 升级是我的建议

标签: python pandas


【解决方案1】:

显然这是一个已修复的错误。我使用的是熊猫 0.13.1。升级到 0.16.1 会产生所需的行为:

In [4]: df.sort([0, 1])
Out[4]: 
    0  1
0   1  1
1 NaN  0

【讨论】:

    猜你喜欢
    • 2022-12-11
    • 2020-07-29
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多