2013-05-23 12 views
10

Pandas 0.11.0ライブラリをインストールしてPython 2.7を実行しています。Python Pandas - 以前に取得したサブセットに基づいてDataFrameから行を削除する

私はこの質問の答えを見つけていないので、私は解決策を持っているよりも経験豊富な人がほしいと思っています。

DF1で、次のようになり、私のデータを言うことができます:

、例えば、 df2 = df1[df1['zip'] == 123]を使用して

df1=

zip x y access 
    123 1 1 4 
    123 1 1 6 
    133 1 2 3 
    145 2 2 3 
    167 3 1 1 
    167 3 1 2 

、その後df2 = df2.join(df1[df1['zip'] == 133])、私は次のデータのサブセットを取得:

df2=

zip x y access 
123 1 1 4 
123 1 1 6 
133 1 2 3 
私が何をしたいか

のいずれかです:

1)df2が作成された後、それらが定義されているようdf1から行を削除/)df2

OR

2と接合し、行を削除(差異は?)df1からdf2が構成されています。

希望はすべて意味があります。これ以上の情報が必要な場合はお知らせください。

EDIT:

df2=

zip x y access 
145 2 2 3 
167 3 1 1 
167 3 1 2 

df1からではないdf2のすべてであること:

理想的には第三のデータフレームは、それは次のようになります作成されます。ありがとう!

+0

出力が必要なのはわかりません。データフレームを2つの新しいデータフレームに分割したいのですが、1つは 'zip'カラムが123または133のローから構成され、残りの1つはローから構成されます。 – DSM

+0

@DSM質問を編集しました。私が探しているのは一番下にあります。ありがとう! – DMML

答えて

23

2つのオプションがあります。

>>> df 
    zip x y access 
0 123 1 1  4 
1 123 1 1  6 
2 133 1 2  3 
3 145 2 2  3 
4 167 3 1  1 
5 167 3 1  2 
>>> keep = [123, 133] 
>>> df_yes = df[df['zip'].isin(keep)] 
>>> df_no = df[~df['zip'].isin(keep)] 
>>> df_yes 
    zip x y access 
0 123 1 1  4 
1 123 1 1  6 
2 133 1 2  3 
>>> df_no 
    zip x y access 
3 145 2 2  3 
4 167 3 1  1 
5 167 3 1  2 

第二に、groupby使用:

>>> grouped = df.groupby(df['zip'].isin(keep)) 

して、最も理にかなって

>>> grouped.get_group(True) 
    zip x y access 
0 123 1 1  4 
1 123 1 1  6 
2 133 1 2  3 
>>> grouped.get_group(False) 
    zip x y access 
3 145 2 2  3 
4 167 3 1  1 
5 167 3 1  2 
>>> [g for k,g in list(grouped)] 
[ zip x y access 
3 145 2 2  3 
4 167 3 1  1 
5 167 3 1  2, zip x y access 
0 123 1 1  4 
1 123 1 1  6 
2 133 1 2  3] 
>>> dict(list(grouped)) 
{False: zip x y access 
3 145 2 2  3 
4 167 3 1  1 
5 167 3 1  2, True: zip x y access 
0 123 1 1  4 
1 123 1 1  6 
2 133 1 2  3} 
>>> dict(list(grouped)).values() 
[ zip x y access 
3 145 2 2  3 
4 167 3 1  1 
5 167 3 1  2, zip x y access 
0 123 1 1  4 
1 123 1 1  6 
2 133 1 2  3] 

の任意のコンテキストに依存しますが、私が思うにまず、isinとマスクを使用しますあなたはその考えを得る。

+0

ありがとうございます! – DMML

関連する問題