2016-08-18 193 views
2

我有一個熊貓數據框與幾個羣組,我想排除某些條件(特定列)未滿足的羣組。例如。在這裏刪除組B,因爲它們在列「crit1」中有一個非數字值。根據條件刪除熊貓羣組

我可以刪除基於條件df.loc[:, (df >< 0).any(axis=0)]的特定列,但它不會刪除整個組。

不知何故,我不能做出下一步,並將其應用於整個組。

name crit1 crit2 
A  0.3  4 
A  0.7  6 
B  inf  4 
B  0.4  3 

所以結果後,這個過濾(只允許浮動)應爲:

A  0.3  4 
A  0.7  6 

回答

1

您可以使用groupbyfilter,你給你可以檢查是否存在一組np.inf的例子, filter的條件:

import pandas as pd 
import numpy as np 
df.groupby('name').filter(lambda g: (g != np.inf).all().all()) 
# name crit1 crit2 
# 0 A  0.3  4 
# 1 A  0.7  6 

如果謂詞僅適用於一列,可以通過訪問列,例如:

df.groupby('name').filter(lambda g: (g.crit1 != np.inf).all()) 
# name crit1 crit2 
# 0 A  0.3  4 
# 1 A  0.7  6 
+0

首先非常感謝您的快速回復!如果我只想將過濾應用到一個特定的列(因爲在別人中我不關心'inf'..),我必須調整.all()嗎? – Don

+0

是的。您可以在lambda函數中指定該列,查看已更新的答案。 – Psidom

+0

好的,這就是我的想象,但是我仍然對Python自己太陌生以至於無法自己找到它,非常感謝! – Don