Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.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 - Fatal编程技术网

Python 使用行值决定要在数据帧中相乘的列

Python 使用行值决定要在数据帧中相乘的列,python,pandas,Python,Pandas,我有一个数据帧df1,它有0和1。 我想用它来决定在另一个数据帧df2中添加什么值,并打印所有疾病的最高值 df1 Gene1 Gene2 Gene3 Gene4 S1 1 0 1 0 S2 1 0 1 1 S3 1 1 0 0 S4 1 0 1 0 S5 0 1 1 1 S6 0 0 1 0 S7 0 1 0 0

我有一个数据帧df1,它有0和1。 我想用它来决定在另一个数据帧df2中添加什么值,并打印所有疾病的最高值

df1

       Gene1    Gene2    Gene3   Gene4
    S1  1   0   1   0
    S2  1   0   1   1
    S3  1   1   0   0
    S4  1   0   1   0
    S5  0   1   1   1
    S6  0   0   1   0
    S7  0   1   0   0
    S8  0   0   1   0
df2

因此,对于df1的S1 结果是

  Disease  Result  
      D1    2.6 
      D2      1 
      D3    0.5   
      D4     25   
      D5      1 
      D6      1  
      D7      1
      D8      5
然后打印最高值和疾病。 因此


如果我能将每个顶级值的结果存储在一个单独的数据框中,那将是一个额外的好处。非常感谢您的帮助。

我不清楚您的索引是什么,但如果索引匹配,您可以使用布尔掩码,然后调用
max
并传递
axis=1

In [55]:
df.index = df1.index
df1[df==1].max(axis=1)

Out[55]:
Disease
D1    26.0
D2     1.0
D3    18.0
D4    25.0
D5     1.0
D6     1.0
D7     0.3
D8     1.0
dtype: float64

我不清楚什么是索引,什么不是索引,但如果索引匹配,则可以使用布尔掩码,然后调用
max
并传递
axis=1

In [55]:
df.index = df1.index
df1[df==1].max(axis=1)

Out[55]:
Disease
D1    26.0
D2     1.0
D3    18.0
D4    25.0
D5     1.0
D6     1.0
D7     0.3
D8     1.0
dtype: float64

你有什么理由不接受你之前的问题的答案,这个答案看起来和这个问题很相似吗?这是因为我把问题搞砸了。这一条使问题更加清楚。我不确定如何删除问题。你能帮我一下吗?对不起,你的问题下面会有一个删除按钮,我想我一点也不清楚你是如何获得df1的Sa结果的。例如,S1指标为1、0、1、0,df2 D1指标为0.1、1、26、1。S1/D1的结果不是最大值(1*.1,0*1,1*26,0*1)=26吗。类似地,S1/D3最大值(1*1,0*18,1*0.5,0*17)=1.0。这两个都与您期望的输出不同,所以我不确定哪一个是正确的。嗨,亚历山大。目的是寻找在每个基因类别下S1有1个基因。然后仅使用df2中与某些运算加法或乘法(我更喜欢加法)匹配的值。因此,如果S1是参考(1,0,1,0),那么对于df2,只考虑来自Gene1和Gene3列的值。如果我们将这两列乘以df2的D1,则得到0.1*26=2.6。如果我们加上这两列,我们得到26.1。我希望这一点现在更清楚了。你有什么理由不接受你之前的问题的答案吗?这个问题看起来很像这个问题。这是因为我把问题搞砸了。这一条使问题更加清楚。我不确定如何删除问题。你能帮我一下吗?对不起,你的问题下面会有一个删除按钮,我想我一点也不清楚你是如何获得df1的Sa结果的。例如,S1指标为1、0、1、0,df2 D1指标为0.1、1、26、1。S1/D1的结果不是最大值(1*.1,0*1,1*26,0*1)=26吗。类似地,S1/D3最大值(1*1,0*18,1*0.5,0*17)=1.0。这两个都与您期望的输出不同,所以我不确定哪一个是正确的。嗨,亚历山大。目的是寻找在每个基因类别下S1有1个基因。然后仅使用df2中与某些运算加法或乘法(我更喜欢加法)匹配的值。因此,如果S1是参考(1,0,1,0),那么对于df2,只考虑来自Gene1和Gene3列的值。如果我们将这两列乘以df2的D1,则得到0.1*26=2.6。如果我们加上这两列,我们得到26.1。我希望这一点现在更清楚了。你有什么理由不接受你之前的问题的答案吗?这个问题看起来很像这个问题。这是因为我把问题搞砸了。这一条使问题更加清楚。我不确定如何删除问题。你能帮我一下吗?对不起,你的问题下面会有一个删除按钮,我想我一点也不清楚你是如何获得df1的Sa结果的。例如,S1指标为1、0、1、0,df2 D1指标为0.1、1、26、1。S1/D1的结果不是最大值(1*.1,0*1,1*26,0*1)=26吗。类似地,S1/D3最大值(1*1,0*18,1*0.5,0*17)=1.0。这两个都与您期望的输出不同,所以我不确定哪一个是正确的。嗨,亚历山大。目的是寻找在每个基因类别下S1有1个基因。然后仅使用df2中与某些运算加法或乘法(我更喜欢加法)匹配的值。因此,如果S1是参考(1,0,1,0),那么对于df2,只考虑来自Gene1和Gene3列的值。如果我们将这两列乘以df2的D1,则得到0.1*26=2.6。如果我们加上这两列,我们得到26.1。我希望这一点现在更清楚了。
In [55]:
df.index = df1.index
df1[df==1].max(axis=1)

Out[55]:
Disease
D1    26.0
D2     1.0
D3    18.0
D4    25.0
D5     1.0
D6     1.0
D7     0.3
D8     1.0
dtype: float64
In [170]: df3 = df2[[x for x in df2.columns if 'Gene' in x]]

In [171]: df3
Out[171]: 
   Gene1  Gene2  Gene3  Gene4
0    0.1    1.0   26.0      1
1    1.0    1.0    1.0      1
2    1.0   18.0    0.5     17
3   25.0    1.0    1.0      1
4    1.0    1.0    1.0      1
5    1.0   33.0    1.0     12
6    1.0    0.3    1.0      1
7    5.0    1.0    1.0      1

In [172]: pd.concat([df2['Disease'], df3.where(df1.reset_index(drop=True) == 1, 1).product(axis=1)], axis=1)
Out[172]: 
    0     1
0  D1   2.6
1  D2   1.0
2  D3  18.0
3  D4  25.0
4  D5   1.0
5  D6   1.0
6  D7   0.3
7  D8   1.0