2016-09-28 5 views
1

私はPandasで非常に新しく、少なくとも誰かが正しい方向に向けることを願っています。ただいずれか1 'エリア'からデータを持っている異なる列の値からデータフレームをフィルタリングするPandas

  time    Area  lon  lat  mode   ID 
    1993-08-01 00:34:28   A 45.627800 34.733400  false  3183 
    1993-08-01 00:34:28   A 45.699600 34.639300  false  3183 
    1993-08-01 00:34:28   A 45.603800 34.730600  false  3183 
    1992-03-21 01:13:18   A 45.686400 34.548100  false  3184 
    1992-03-21 01:13:18   A 45.702400 34.554300  false  3184 
    1992-03-21 01:13:18   B 45.304784 34.626540  NaN  3184 
    1992-03-21 16:13:20   A 45.633800 34.709700  false  3185 
    1992-03-21 16:13:20   A 45.643400 34.709000  true  3185 
    1992-03-21 16:13:20   A 45.634600 34.959500  true  3185 

私は'ID' のすべてのインスタンスをフィルタリングしたい

ここでは、実際の質問来る:

DFがAまたはB)。私が欲しい「ID」のはこのため「」「B」が新しいデータフレームに格納するの少なくとも1つのインスタンスを持っている必要があります。以下に提示するだけのentires上に提示dfをから

は制約に適合:

1992-03-21 01:13:18   A 45.686400 34.548100  false  3184 
    1992-03-21 01:13:18   A 45.702400 34.554300  false  3184 
    1992-03-21 01:13:18   B 45.304784 34.626540  NaN  3184 

は今、私は文と一時ストア「エリアにあるリストであれば、ループのための定期的なことをしようしようよ'の属性はそれぞれ' ID 'です。これは非常に悪いアプローチのように感じ、これを行うためのいくつかの慣用的なパンダの方法がなければならない。 isin

​​

最終使用boolean indexing

+0

なぜ出力がないか1992-03-21 01:13:18 A 45.686400 34.548100 false 3184'? – jezrael

+0

あなたは何を意味するのか分かりませんか?最後の2行は、ユニークな「ID」を共有し、エリアAとBの両方を含む唯一のエントリであるため、 – PigFoot

+0

Hmmですが、領域AはID = 3184とBで2行あります唯一。だから、なぜ出力はカテゴリ 'A'の1行だけで、下の私の答えと同じではないのですか? – jezrael

答えて

0

は、私はすべてのグループに含まれていないすべての値を除去するためにあなたがdropnapivot_tableが必要だと思う

print (df[df.ID.isin(vals)]) 
        time Area  lon  lat mode ID 
3 1992-03-21 01:13:18 A 45.686400 34.54810 False 3184 
4 1992-03-21 01:13:18 A 45.702400 34.55430 False 3184 
5 1992-03-21 01:13:18 B 45.304784 34.62654 NaN 3184 
+0

ありがとうございます! 2百万以上の行を持つ完全なデータセットで完璧かつ高速に動作します。 – PigFoot

0

あなたは以下を見てみることができます:

In [24]: df 
Out[24]: 
    area id 
0 A 3183 
1 A 3183 
2 A 3184 
3 B 3184 
4 A 3185 
5 A 3185 

In [25]: df[df.groupby('id')['area'].transform('nunique') > 1] 
Out[25]: 
    area id 
2 A 3184 
3 B 3184 

私は私の例を関連する2つのカラム(idとarea)に減らしましたが、これはあなたの完全なDataFrameで問題なく動作します。

私は基本的にすべてのIDについて異なる領域の数を数え、1つの領域のみを除外します。

+0

私はあなたのアプローチを試みたが、それは私のために働かなかった。おそらく私は間違ったことをしたでしょう。とにかく助けてくれてありがとう! – PigFoot

関連する問題