我有一个(7985, 3048)
形的数据框,格式如下:
image_name col1_ID col2_ID col3_ID ... colN_ID # header
rdr_001_101 0.00342 0.00015 0.10094 ... 0.34210 # prob. distrib
rdr_001_133 0.00432 0.00025 0.01465 ... 0.22108 # prob. distrib
...
...
rdr_003_167 0.07543 0.00576 0.07523 ... 0.73421 # prob. distrib
现在,对于每个图像,我只想从这些3047个值中选择100个列及其相应的索引。应根据列中的值选择100列(即选择具有最大值的列,直到我们达到100的计数)
约束:列的顺序很重要(即输出中的顺序应与输入中的顺序相同)。请参见下面的输入/输出示例
我有一个基于循环的解决方案(使用df.iterrows),但速度非常慢,而且通常不推荐使用这种方法。此外,这是一个简单的示例,而我的实际数据帧可能有更多行
其他可能(更快)的替代方案是什么
示例输入,仅包含5列:
image_name col1_ID col2_ID col3_ID col4_ID col5_ID
rdr_001_101 0.00342 0.00015 0.10094 0.34210 0.27651
rdr_001_133 0.43211 0.00025 0.01465 0.22108 0.00123
rdr_003_167 0.07543 0.25761 0.07523 0.01148 0.00341
预期输出,以3列作为阈值:
col3_ID col4_ID col5_ID
col1_ID col3_ID col4_ID
col1_ID col2_ID col3_ID
使用^{} 和1d数组,按列的长度首先按
np.arange(len(df.columns))
,然后索引前N个值,按np.sort
和最后一个索引列名称cols
排序:如有必要,最后将输出转换为
DataFrame
:如果可能,不需要对列名称进行排序
1d array
:相关问题 更多 >
编程相关推荐