2016-08-18 10 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がグループ内に存在する場合は、あなたが与えるたとえば、あなたがチェックすることができますし、述語は1列のみに適用された場合、あなたは経由で列にアクセスすることができます

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

はい。ラムダ関数の列を指定して、更新された答えを見ることができます。 – Psidom

+0

それは私が想像したとおりですが、それでも私はそれが自分自身を見つけるためにはあまりにもPythonに新しいです、ありがとう! – Don

関連する問題