2017-05-17 110 views
1

所以我有一個數據幀,我通過df4.append(df3,ignore_index = True);然而,我仍然有一些問題在我的列Gene_symbol中刪除重複,同時仍然保持情況1,2和3中的值。我已經嘗試df4.drop_duplicates([「Gene_Symbol」])和其他各種方法,所有這些方法往往刪除其他行,並與我的數據。添加和刪除Dataframe的一列上的重複值Pandas

什麼我得到是這樣的:

  X  Case1  Case2  Case3  Gene_Symbol 
8026 8025 0.5326718 0.0000000 0.0000000 GAPDHS;TMEM147 
32531 32530 0.0000000 0.5416982 0.0000000 GAPDHS;TMEM147 
57051 57050 0.0000000 0.0000000 0.4821592 GAPDHS;TMEM147 

我想有低於數據框在我的實際值保持

 Case1  Case2  Case3  Gene_Symbol 
    0.5326718 0.5416982 0.4821592 GAPDHS;TMEM147 

謝謝您的時間!

+0

所以你想用實際測量來替換_CaseX_列中的_0_測量值?上面給出的情況(只有1次有效測量,總共3行)適用於所有數據? – patrick

+0

這是正確的!對不起,如果問題不明確。 –

回答

0

如何

df = df.groupby('Gene_Symbol')['Case1', 'Case2', 'Case3'].sum().reset_index() 

    Gene_Symbol  Case1  Case2  Case3 
0 GAPDHS;TMEM147 0.532672 0.541698 0.482159 
+0

嗨,無論如何,讓它這樣,而不是寫入案例1和案例2我可以有更多的循環?我試着做下面的df4 = df4.groupby('Gene_Symbol')[「Case」+ str(index)]。sum()。reset_index()但結果只剩下case 3了。謝謝! –

+0

如果您對列X沒有打擾,那麼您可以使用df.groupby('Gene_Symbol')。sum()。reset_index(),因爲這最終會在X中添加值 – Vaishali

+0

非常感謝您的天才! –

0

你可以嘗試以下方法,如果所有案件列只包含一個每個基因非零值,這應該工作(假設你沒有X柱看上去像一個索引):

df.set_index('Gene_Symbol').stack()[lambda x: x != 0].unstack(level=1).reset_index() 

#  Gene_Symbol  Case1  Case2  Case3 
#0 GAPDHS;TMEM147 0.532672 0.541698 0.482159 

或者:

df 
#   X  Case1  Case2  Case3  Gene_Symbol 
#8026 8025 0.532672 0.000000 0.000000 GAPDHS;TMEM147 
#32531 32530 0.000000 0.541698 0.000000 GAPDHS;TMEM147 
#57051 57050 0.000000 0.000000 0.482159 GAPDHS;TMEM147 

df.drop('X', 1, inplace=True) 

df.set_index('Gene_Symbol').stack()[lambda x: x != 0].unstack(level=1).reset_index() 
​ 
#  Gene_Symbol  Case1  Case2  Case3 
#0 GAPDHS;TMEM147 0.532672 0.541698 0.482159 
+0

不幸的是,這似乎刪除了我的案例2和案例3的價值觀。謝謝你,雖然 –

+0

你是什麼意思*刪除案例2和案例3 *的值?如果你的意思是* nans *,你可以使用'fillna(0)'。 – Psidom

+0

所以它刪除X列,但我仍然最終失去了我的案例2和3的值。 –

相關問題