![](/img/trans.png)
[英]Is there a better way to select rows from a pandas DataFrame based on multiple conditions?
[英]pandas remove rows from dataframe based on multiple conditions without for loops
我有一個6列的熊貓數據框數據,我想根據某些條件處理並刪除一些行。 數據框以制表符分隔,如下所示:
RO52_HUMAN TRIM6_HUMAN 1.83e-136 471 45.86 216
RO52_HUMAN TRI68_HUMAN 6.46e-127 482 42.946 207
RO52_HUMAN TRI22_HUMAN 6.49e-121 491 41.344 203
RO52_HUMAN TRI38_HUMAN 7.15e-117 458 42.358 194
RO52_HUMAN TRIM5_HUMAN 3.6e-114 499 40.281 201
RO52_HUMAN TRI39_HUMAN 2.56e-111 490 39.388 193
RO52_HUMAN TRI11_HUMAN 2.35e-109 471 43.524 205
RO52_HUMAN TRI27_HUMAN 1.44e-108 495 37.576 186
RO52_HUMAN TRI34_HUMAN 6.12e-105 500 43.0 215
RO52_HUMAN TRI17_HUMAN 1.79e-87 461 37.093 171
刪除行的條件僅取決於前兩列。 我也有一個字典,整個關鍵字都是蛋白質ID,就像前兩列中的那些一樣,並且值也是其他蛋白質ID的列表。 基本上我想刪除所有行,如果:
第一列的值在字典中作為鍵,並且第二列的值在字典中用於該鍵的值。 我為此編寫了反向邏輯,並嘗試以某種方式(而不是保持不滿足這些條件的行)執行它,這是這樣寫的
blast_out_filtered_df = blast_out_df[ -blast_out_df[0].isin(homolog_dict.keys()) | (blast_out_df[0].isin(homolog_dict.keys() & -blast_out_df[1].isin(homolog_dict[blast_out_df[0]]) ) ) ]
我讀入文件中的數據框稱為blast_out_df,而我嘗試使用過濾后的行創建的新數據框為blast_out_filtered_df。 Ofcrourse運行此代碼給我以下錯誤:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\mstambou\AppData\Local\Continuum\Anaconda\lib\site-
packages\pandas\core\generic.py", line 806, in __hash__
' hashed'.format(self.__class__.__name__))
TypeError: 'Series' objects are mutable, thus they cannot be hashed
這是因為我試圖用特定行的列值索引字典。 如何有效執行此操作? 我使用usint .iterrrows()方法實現了它,但是我有一百萬行以上,這太慢了。 有什么建議么? 謝謝。
字典看起來像這樣:
homolog_dict['MAPK5_MOUSE']
['MAPK5_HUMAN']
在這種情況下,鍵為“ MAPK5_MOUSE”,值為['MAPK5_HUMAN”]列表之一
通過執行以下操作找到了解決方案:
dct_2 = dict(RO52_HUMAN=['TRI68_HUMAN', 'TRI67_HUMAN'])
blast_out_df[map(isnt_in, zip(blast_out_df[1], blast_out_df[0].map(dct_2)))]
並通過定義我自己的功能:
def isnt_in(lst_item):
if str(lst_item[1])== 'nan':
return True
return lst_item[0] not in lst_item[1]
由於我的字典的值是列表,因此單獨使用map函數不會被剪切。 我還必須定義自己的函數,因為如果我找不到該字典的鍵,則map將返回np.nan值,在這種情況下,該函數將為此任務返回True。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.