在pandas/python中找到最高结果的组合

2024-09-27 22:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似这样的数据帧:

  Disease  Gene1  Gene2  Gene3  Gene4
      D1    0.10    0.12   0.26    0.1
      D2    1.00    1.00   0.01    0.13
      D3    0.1     0.18   0.50    0.17
      D4    0.25    0.10   0.31    0.41
      D5    0.01    0.01   0.21    0.44
      D6    0.31    0.33   0.81    0.12
      D7    0.61    0.03   0.41    0.36
      D8    0.05    0.84   0.38    0.83

但它大约有500列宽,数千行深。你知道吗

对于每一种疾病,我想考虑所有基因列的组合,它们的总和比任何其他疾病的值都高。你知道吗

从这组组合中,我要选择长度最短的组合。你知道吗

从最短的长度中,我想选择 产生该疾病的最大值。你知道吗

例如,对于D2,Gene1+Gene2的和最高。你知道吗

你猜在这种情况下顺序无关紧要。我希望这能 理智。谢谢你的时间。你知道吗

编辑

我想问题是我没有正确地将数据传输到powerset。代码只是在运行,没有给出结果或超时。你知道吗

import itertools as IT
import numpy as np
import pandas as pd
import time
start = time.time()

def PP():
    PP = pd.read_csv('datainfile.csv')
    return PP

PP = PP()



#np.random.seed(2015)

def powerset(iterable, reverse=False, rvals=None):
    """powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"""
    s = list(iterable)
    N = len(s)
    if rvals is None:
        rvals = range(N, -1, -1) if reverse else range(N + 1)
    return IT.chain.from_iterable(
        IT.combinations(s, r) for r in rvals)

# df = pd.read_table('data', sep='\s+')
#ncols, nrows, ndiseases = 515, 5000, 200
Genes_list = list(PP.iloc[[0],1:].columns)
concatHS_list = list(PP.iloc[0:,0])

PP = PP.set_index(['concatHS'])


result = dict()
for combo in powerset(PP.columns):
    if len(combo) < 2: continue
    concatHS = PP[list(combo)].sum(axis=1).argmax()
    if concatHS not in result:
        result[concatHS] = combo
    if not set(PP.index).difference(result.keys()):
        break

for concatHS, combo in result.items():
    print('{}: {}'.format(concatHS, combo))

end = time.time()
elapsed = end - start
print("Time elapsed:", elapsed) 

Tags: inimportiftimeasitresultlist

热门问题