基于具有已知最大列和列排序约束的阈值过滤数据帧

问题描述 投票:0回答:1

我有一个形状为(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),但是它非常慢,而且似乎通常不建议这样做。此外,这是一个简单的示例,而我的实际数据框可能会有更多的行。

还有什么可能的(更快的)替代方法?


样本输入,只有五列:

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
python pandas performance dataframe memory-efficient
1个回答
0
投票

将具有一维数组的numpy.argsort用于按列长排序,首先是numpy.argsort,然后索引前N个值,按np.arange(len(df.columns))对其排序,最后索引列名np.sort:]]

cols
© www.soinside.com 2019 - 2024. All rights reserved.