这个pandas dataframe.apply(lambda)有什么问题?

时间:2016-05-05 05:38:44

标签: python pandas lambda dataframe

我无法理解为什么这段代码不起作用。我正在用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

1 个答案:

答案 0 :(得分:2)

我假设你的问题是:为什么你的代码不能做你想要的?

.apply(lambda x: x.sort_values())确实做你想做的事。但是,此lambda的返回类型是pd.Series,并且它具有保留的索引。当重新组合所有列时,pandas确保索引排成一行,从而删除您刚刚执行的排序。为了打破这种行为,获取值(没有索引)

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