我不明白为什么这段代码不起作用。我正在用 lambda 练习 df.apply 。我希望输出是排序后的 df。谢谢。
import pandas as pd
import numpy as np
data = np.random.randn(10,5)
col = list('ABCDE') # assign column names
我想创建一个新的数据框 t,它是一个排序的 df
df = pd.DataFrame(data, columns = col)
t = df.apply(lambda x: x.sort_values())
>>> df
A B C D E
0 1.548097 0.682373 -1.254562 -0.249815 0.002013
1 -2.581173 0.946034 -1.389210 -0.877128 -1.569914
2 -0.980636 1.555700 -1.346029 0.180983 1.112470
3 0.724657 0.520718 0.122696 1.386643 0.060714
4 -0.119740 -0.665260 -1.085457 0.699085 1.149364
5 -0.004628 -0.479672 -0.641696 0.875471 0.826836
6 0.598497 -0.018560 -1.002511 0.478659 0.463565
7 -0.005159 -0.137165 -0.460209 0.284940 0.755981
8 0.576421 0.098833 -2.664028 0.118074 -0.426393
9 -0.223696 -0.589748 -0.733454 -0.254564 -0.519015
>>> t
A B C D E
0 1.548097 0.682373 -1.254562 -0.249815 0.002013
1 -2.581173 0.946034 -1.389210 -0.877128 -1.569914
2 -0.980636 1.555700 -1.346029 0.180983 1.112470
3 0.724657 0.520718 0.122696 1.386643 0.060714
4 -0.119740 -0.665260 -1.085457 0.699085 1.149364
5 -0.004628 -0.479672 -0.641696 0.875471 0.826836
6 0.598497 -0.018560 -1.002511 0.478659 0.463565
7 -0.005159 -0.137165 -0.460209 0.284940 0.755981
8 0.576421 0.098833 -2.664028 0.118074 -0.426393
9 -0.223696 -0.589748 -0.733454 -0.254564 -0.519015
最佳答案
我假设您的问题是:为什么您的代码没有执行您想要的操作?
.apply(lambda x: x.sort_values())
确实可以满足您的要求。但是,此 lambda 的返回类型是 pd.Series
并且它有一个保留的索引。重新组合所有列时,pandas 确保索引对齐,从而删除您刚才所做的排序。为了打破这种行为,获取值(不带索引)
df.apply(lambda x: x.sort_values().values)
关于python - 这个 pandas dataframe.apply(lambda) 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37043199/