如何在pandas数据帧中找到每列的n个最小值

时间:2016-12-05 11:12:51

标签: loops pandas dataframe

我有一个包含74列和1000行的数据帧。我希望找到每列20个最小值,计算这20个值的平均值,并将结果作为转换数据帧返回一列和74行

               1               2               3    
A         2013918.153207  2010286.148942  2010903.782339  
B         1694927.195604  1648518.272357  1665890.462014     
C         1548895.121455  1594033.016024  1589820.170989   

在Python中有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以plunker examplensmallest Series(列)一起使用,因此需要使用apply

print (df.apply(lambda x: x.nsmallest(2).mean()).to_frame('val'))
            val
1  1.621911e+06
2  1.621276e+06
3  1.627855e+06

Numpy解决方案

首先转换为numpy array,按列排序,选择行并获取mean。上次使用DataFrame构造函数:

arr = df.values
arr.sort(axis=0)
print (arr)
[[ 1548895.121455  1594033.016024  1589820.170989]
 [ 1694927.195604  1648518.272357  1665890.462014]
 [ 2013918.153207  2010286.148942  2010903.782339]]

print (np.mean(arr[:2,:], axis=0))
[ 1621911.1585295  1621275.6441905  1627855.3165015]

print (pd.DataFrame({'val':np.mean(arr[:2,:], axis=0)}, index=df.columns))
            val
1  1.621911e+06
2  1.621276e+06
3  1.627855e+06