我有一个包含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中有一种简单的方法吗?
答案 0 :(得分:0)
您可以plunker example与nsmallest
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