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

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


df = df.apply( lambda x: x.sort_values())   

我用它来处理我的数据


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)功能是什么?


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


海绵宝宝撒
浏览 252回答 2
2回答

慕容708150

默认情况下,Pandas 操作根据它们的 index 对齐数据。所以考虑例如In [19]: df = pd.DataFrame([(10,1),(9,2),(8,3),(7,4)], index=list('ABDC'))In [20]: dfOut[20]:     0  1A  10  1B   9  2D   8  3C   7  4当 Pandas 计算 时df.apply(lambda x: x.sort_values()),它会生成系列:In [24]: df[0].sort_values()Out[24]: C     7D     8B     9A    10Name: 0, dtype: int64In [25]: df[1].sort_values()Out[25]: A    1B    2D    3C    4Name: 1, dtype: int64然后尝试将这两个系列组合成一个结果数据帧。它通过对齐索引来做到这一点:In [21]: df.apply(lambda x: x.sort_values())   Out[21]:     0  1A  10  1B   9  2C   7  4D   8  3相反,当 lambda 函数返回一个 NumPy 数组时,没有要对齐的索引。所以 Pandas 只是将 NumPy 数组中的值以相同的顺序粘贴到结果 DataFrame 中。因此,当 Pandas 计算 时df.apply(lambda x: x.sort_values().values),它会生成 NumPy 数组:In [26]: df[0].sort_values().valuesOut[26]: array([ 7,  8,  9, 10])In [27]: df[1].sort_values().valuesOut[27]: array([1, 2, 3, 4])然后尝试将这两个 NumPy 数组组合成一个具有相同顺序的值的结果 DataFrameIn [28]: df.apply(lambda x: x.sort_values().values)   Out[28]:     0  1A   7  1B   8  2D   9  3C  10  4

慕斯王

欢迎使用 StackOverflow!根据 pandas 文档,sort_values()返回 DataFrame 对象本身,同时values()返回 DataFrame 中值的 numpy 数组表示。由于apply()在 DataFrame 的轴上应用指定的函数,应用的函数必须返回当前行/列的 numpy 数组表示,而不是返回整个 DataFrame。这就是为什么当您只使用sort_values().您可以在sort_values() 文档、values() 文档和apply() 文档中阅读更完整的解释
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python