首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么sort_values()不同于sort_values().values

为什么sort_values()不同于sort_values().values
EN

Stack Overflow用户
提问于 2018-11-14 11:19:00
回答 2查看 247关注 0票数 0

我想要按所有列对数据帧进行排序,我找到了一种方法来解决这个问题,使用

代码语言:javascript
复制
df = df.apply( lambda x: x.sort_values())   

我把它用在我的数据上

代码语言:javascript
复制
text1 = text
text = text.apply( lambda x : x.sort_values())
text1 = text1.apply( lambda x : x.sort_values().values)
text.head()
text1.head()

为什么text = text.apply( lambda x : x.sort_values())不会得到一个错误的答案,.vaules)函数是什么?

代码语言:javascript
复制
text.head()
    Wave    2881.394531 2880.574219 2879.75293  2878.931641 2878.111328
    N-1     0.220934    0.203666    0.205743    0.196011    0.176293
    N-10    0.432692    0.387074    0.395692    0.355331    0.358963
    N-11    0.483360    0.463233    0.456304    0.428930    0.421482
    N-12    0.365057    0.364417    0.385134    0.352451    0.350513
    N-13    0.492172    0.466263    0.480657    0.439115    0.404883


text1.head()
    Wave    2881.394531 2880.574219 2879.75293  2878.931641 2878.111328
    P+1    -21.297623   -25.141329  -21.097095  -31.380476  -38.847958
    P+2    -12.681051   -14.661134  -13.688742  -16.829298  -20.320133
    P+3    -8.164744    -13.097990  -11.784309  -15.419610  -17.822252
    P+4    -0.023353    -0.926852   -8.036203   -14.583183  -17.071484
    P+5     0.022854    -0.037756   -0.002519   -1.891178   -7.795961
EN

回答 2

Stack Overflow用户

发布于 2018-11-14 11:36:48

默认情况下,Pandas操作align data based on their index。因此,请考虑以下示例

代码语言:javascript
复制
In [19]: df = pd.DataFrame([(10,1),(9,2),(8,3),(7,4)], index=list('ABDC'))

In [20]: df
Out[20]: 
    0  1
A  10  1
B   9  2
D   8  3
C   7  4

当Pandas评估df.apply(lambda x: x.sort_values())时,它会生成序列:

代码语言:javascript
复制
In [24]: df[0].sort_values()
Out[24]: 
C     7
D     8
B     9
A    10
Name: 0, dtype: int64

In [25]: df[1].sort_values()
Out[25]: 
A    1
B    2
D    3
C    4
Name: 1, dtype: int64

然后尝试将这两个序列组合成一个结果DataFrame。它通过对齐索引来做到这一点:

代码语言:javascript
复制
In [21]: df.apply(lambda x: x.sort_values())   
Out[21]: 
    0  1
A  10  1
B   9  2
C   7  4
D   8  3

相反,当lambda函数返回一个NumPy数组时,没有索引可供对齐。因此,Pandas只是按照相同的顺序将NumPy数组中的值粘贴到结果DataFrame中。

因此,当Pandas计算df.apply(lambda x: x.sort_values().values)时,它会生成NumPy数组:

代码语言:javascript
复制
In [26]: df[0].sort_values().values
Out[26]: array([ 7,  8,  9, 10])

In [27]: df[1].sort_values().values
Out[27]: array([1, 2, 3, 4])

然后尝试将这两个NumPy数组组合成具有相同顺序的值的结果DataFrame

代码语言:javascript
复制
In [28]: df.apply(lambda x: x.sort_values().values)   
Out[28]: 
    0  1
A   7  1
B   8  2
D   9  3
C  10  4
票数 2
EN

Stack Overflow用户

发布于 2018-11-14 11:26:02

欢迎使用StackOverflow!

根据pandas文档,sort_values()返回DataFrame对象本身,而values()返回DataFrame中值的numpy数组表示。因为apply()在DataFrame轴上应用指定的函数,所以应用的函数必须返回当前行/列的DataFrame数组表示,而不是返回整个numpy。这就是为什么当你只使用sort_values()时,它会给你错误的结果。

您可以在sort_values() documentationvalues() documentationapply() documentation上阅读更完整的说明

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53292709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档