【问题标题】:How np.argsort works in pandas DataFrame?np.argsort 如何在 pandas DataFrame 中工作?
【发布时间】:2017-01-03 15:05:39
【问题描述】:

我有以下名为 index 的 pandas DataFrame:

tz
                       521.0
Africa/Cairo             3.0
Africa/Casablanca        1.0   
Africa/Ceuta             2.0
Africa/Johannesburg      1.0
dtype: float64 

当我申请 index.argsort() 时,我会得到这样的信息:

tz
                       2
Africa/Cairo           4
Africa/Casablanca      3
Africa/Ceuta           1
Africa/Johannesburg    0
dtype: int64

有人可以向我解释一下数字:2,4,3,1,0 的来源吗?我知道它们的索引范围从 0 到 4,但我找不到它们的顺序中的任何逻辑。

【问题讨论】:

  • 索引中有空字符串吗?而且这看起来像熊猫系列而不是数据框。

标签: python python-3.x pandas numpy


【解决方案1】:

argsort 返回要排序的值的索引位置。请记住,这是一个 numpy 函数,它对系列或数据帧索引的分配是错误的。

  • 2 指的是 2 位置中的项目(第 3 位)是最小值
    • 这是1.0
  • 4 指的是 4 位置中的项目(第 5 位)是下一个
    • 还有1.0
  • 3(第四位)是2.0
  • 1(第二名)是3.0
  • 0(第 1 位)是 521.0 和最大值

分配给数组并作为切片使用更合适

a = s.values.argsort()
s.iloc[a]

tz
Africa/Casablanca        1.0
Africa/Johannesburg      1.0
Africa/Ceuta             2.0
Africa/Cairo             3.0
                       521.0
Name: value, dtype: float64

【讨论】:

  • 其实用s.sort_values()比较合适,可读性更强,效果一样
【解决方案2】:

是的,一些奇怪的排序正在进行。中的示例 the argsort docs:

x = np.array([3, 1, 2])
np.argsort(x)

给出排序顺序:

array([1, 2, 0])

人们会认为最终的顺序是 2,3,1。但是x[np.argsort(x)] 给出了 1,2,3。去图吧。

【讨论】:

  • argsort 返回对数组排序的索引,而不是排序后的数组本身。
猜你喜欢
  • 1970-01-01
  • 2017-12-09
  • 2019-09-16
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2022-12-22
  • 2015-09-25
  • 2018-07-19
相关资源
最近更新 更多