Python 为什么sort_values()与sort_values()不同
我想按所有列对数据帧进行排序,并找到一种使用Python 为什么sort_values()与sort_values()不同,python,pandas,Python,Pandas,我想按所有列对数据帧进行排序,并找到一种使用 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
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
欢迎来到StackOverflow 根据pandas文档,
sort_values()
返回数据框对象本身,而values()
返回数据框中值的numpy数组表示形式。由于apply()
跨数据帧的轴应用指定的函数,因此应用的函数必须返回当前行/列的numpy数组表示形式,而不是返回整个数据帧。这就是为什么当您仅使用sort\u values()
时,它会给出错误的结果
您可以在上阅读更完整的说明,欢迎来到StackOverflow 根据pandas文档,
sort_values()
返回数据框对象本身,而values()
返回数据框中值的numpy数组表示形式。由于apply()
跨数据帧的轴应用指定的函数,因此应用的函数必须返回当前行/列的numpy数组表示形式,而不是返回整个数据帧。这就是为什么当您仅使用sort\u values()
时,它会给出错误的结果
您可以在和上阅读更完整的说明,默认情况下,您可以阅读这些操作。 因此考虑例如
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
当计算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数组中的值以相同的顺序粘贴到结果数据帧中 因此,当panda计算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数组组合成一个结果数据帧,其值的顺序相同
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
默认情况下,熊猫操作。 因此考虑例如
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
当计算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数组中的值以相同的顺序粘贴到结果数据帧中 因此,当panda计算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数组组合成一个结果数据帧,其值的顺序相同
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
@联合国大学。很好的解释。这是一个正确而详细的答案,非常感谢!@unutbu。很好的解释。这是一个正确而详细的答案,非常感谢