Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为数据集生成所有排列_Python_Pandas_Combinations_Permutation - Fatal编程技术网

Python 为数据集生成所有排列

Python 为数据集生成所有排列,python,pandas,combinations,permutation,Python,Pandas,Combinations,Permutation,我有一个数据框,看起来像这样: df1 = pd.DataFrame({'Gene':['TP53', 'COX5', 'P16'], 'test':[1,3,0], 'Healthy':[0,0,2]}) Gene test Healthy 0 TP53 1 0 1 COX5 3 0 2 P16 0 2 我一直在尝试创建所有可能值的排列。 其想法是将第一个基因“TP53”及其在“test”列中的值映射到

我有一个数据框,看起来像这样:

df1 = pd.DataFrame({'Gene':['TP53', 'COX5', 'P16'], 'test':[1,3,0], 'Healthy':[0,0,2]})

    Gene    test    Healthy
0   TP53    1       0
1   COX5    3       0
2   P16     0       2
我一直在尝试创建所有可能值的排列。 其想法是将第一个基因“TP53”及其在“test”列中的值映射到每一个其他基因,并记录“health”列的值

例如,最初TP53将映射到自身:TP53:TP53:1:0 然后TP53将从健康列映射到COX5:TP53:COX5:1:0 然后是下一个基因:TP53:P16:1:2 接下来,将使用“测试”列中的值映射基因COX5,以与“健康”列进行比较:COX5:TP53:3:0 然后:COX5:COX5:3:0

因此,最终将生成下表:

All_combinations
TP53:TP53:1:0
TP53:COX5:1:0
TP53:P16:1:2
COX5:TP53:3:0
COX5:COX5:3:0
COX5:P16:3:2
P16:TP53:0:0
P16:COX5:0:0
P16:P16:0:2
我尝试了以下代码,但遇到了困难

import pandas as pd
df1 = pd.DataFrame({'Gene':['TP53', 'COX5', 'P16'], 'test':[1,3,0], 'Healthy':[0,0,2]})
df2 = df1.transpose()
df2.columns = df2.iloc[0]
df2 = df2.iloc[1:]

from itertools import product
uniques = [df1[i].unique().tolist() for i in df1.iloc[:,[1,2]]]
pd.DataFrame(product(*uniques), columns = df2.iloc[:,])
真正的数据集有32000多行,所以运行速度快的东西会很好。
感谢您的帮助

此代码是否解决了您的问题

将熊猫作为pd导入
df1=pd.DataFrame({'Gene':['TP53','COX5','P16'],'test':[1,3,0],'health':[0,0,2]})
#将所有组合创建为元组。
#请注意,测试取自gene1,但健康取自gene2
#枚举用于获取与该基因相关的行号
行列表=[]
对于i,枚举中的gene1(df1.Gene):
对于j,枚举中的gene2(df1.Gene):
行_list.append((gene1,gene2,df1.iloc[i].test,df1.iloc[j].health))
#现在用结果创建一个新的dataframe
df2=pd.DataFrame(行列表,列=['Gene1'、'Gene2'、'test'、'健康')
这将产生:

  Gene1 Gene2  test  Healthy
0  TP53  TP53     1        0
1  TP53  COX5     1        0
2  TP53   P16     1        2
3  COX5  TP53     3        0
4  COX5  COX5     3        0
5  COX5   P16     3        2
6   P16  TP53     0        0
7   P16  COX5     0        0
8   P16   P16     0        2

因为已经给出了
pandas
解决方案。只是展示
产品的工作原理

a=[1,3,0]
b=[0,0,2]
from itertools import product
list(product(*[a]+[b]))

[(1, 0), (1, 0), (1, 2), (3, 0), (3, 0), (3, 2), (0, 0), (0, 0), (0, 2)]

请提供预期的价格。显示中间结果与预期结果的偏差。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。“有困难”不是一个问题规范。您意识到32000行的所有成对组合将为您提供一个超过10亿行的数据帧。。。