2 回答

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

TA贡献1864条经验 获得超2个赞
欢迎使用 StackOverflow!
根据 pandas 文档,sort_values()
返回 DataFrame 对象本身,同时values()
返回 DataFrame 中值的 numpy 数组表示。由于apply()
在 DataFrame 的轴上应用指定的函数,应用的函数必须返回当前行/列的 numpy 数组表示,而不是返回整个 DataFrame。这就是为什么当您只使用sort_values()
.
您可以在sort_values() 文档、values() 文档和apply() 文档中阅读更完整的解释
添加回答
举报