为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 sort_values() 与 sort_values().values 不同

为什么 sort_values() 与 sort_values().values 不同

海绵宝宝撒 2021-08-17 15:37:02
我想按所有列对数据框进行排序,我找到了一种方法来解决这个问题df = df.apply( lambda x: x.sort_values())   我用它来处理我的数据text1 = texttext = 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)功能是什么?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.404883text1.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
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

默认情况下,Pandas 操作根据它们的 index 对齐数据。所以考虑例如


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()),它会生成系列:


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

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


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 数组:


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


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


查看完整回答
反对 回复 2021-08-17
?
慕斯王

TA贡献1864条经验 获得超2个赞

欢迎使用 StackOverflow!

根据 pandas 文档,sort_values()返回 DataFrame 对象本身,同时values()返回 DataFrame 中值的 numpy 数组表示。由于apply()在 DataFrame 的轴上应用指定的函数,应用的函数必须返回当前行/列的 numpy 数组表示,而不是返回整个 DataFrame。这就是为什么当您只使用sort_values().

您可以在sort_values() 文档、values() 文档和apply() 文档中阅读更完整的解释


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号