2015-06-12 27 views
1

我有一個數據幀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

Disease Gene1 Gene2 Gene3 Gene4 
     D1 0.1  1  26  1 
     D2  1  1  1  1 
     D3  1  18 0.5  17 
     D4  25  1  1  1 
     D5  1  1  1  1 
     D6  1  33  1  12 
     D7  1 0.3  1  1 
     D8  5  1  1  1 

從而爲DF1 S1的結果是

Disease Result 
     D1 2.6 
     D2  1 
     D3 0.5 
     D4  25 
     D5  1 
     D6  1 
     D7  1 
     D8  5 

然後打印的最高值和疾病。 因此

D4 25 

這將是一個額外的好處,如果我可以爲每個頂部值的結果存儲在一個單獨數據幀。非常感謝你的幫助。

+1

沒有任何理由你還沒有接受過類似這個問題的答案嗎? – EdChum

+0

這是因爲我搞砸了這個問題。這個使問題更清楚。我不確定如何刪除問題。你能幫我這也...對不起 –

+0

將有一個刪除按鈕在你的問題下我認爲 – EdChum

回答

0

這是我不清楚什麼是你的索引,哪些不是,但如果指數相匹配,那麼你可以使用一個布爾面膜,然後調用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 
0
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