Python 使用行值决定要在数据帧中相乘的列
我有一个数据帧df1,它有0和1。 我想用它来决定在另一个数据帧df2中添加什么值,并打印所有疾病的最高值 df1Python 使用行值决定要在数据帧中相乘的列,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
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