2016-07-14 18 views
1

を選択するために、パンダグループごとの使用:私はワンド何私は、次のフォームにパンダのデータフレームを持っている特定のサブグループに

 

    id grp values1 values2 
0 1 a_1 2   4 
1 1 a_2 3   6 
2 1 b_1 4   8 
3 2 b_2 5   10 
4 2 c_1 6   12 
5 3 z_1 7   14 
6 4 y_1 8   16 
7 5 a_1 9   18 
8 5 a_2 10   20 
9 5 a_1 11   22 
10 5 a_2 12   24 
11 7 z_1 13   26 
12 8 q_1 14   28 
13 9 a_2 15   30 
14 9 a_1 16   32 

は「「A_1」を含む行とIDと低減されたデータフレームで、次のようなIDグループの場合にのみ "a_2"と表示されます。

 
    id grp values1 values2 

7 5 a_1 9   18 
8 5 a_2 10   20 
9 5 a_1 11   22 
10 5 a_2 12   24 
13 9 a_2 15   30 
14 9 a_1 16   32 

ID変数でカウントを行うとき、グループ値が共に「ペア」、すなわち「A_1」および「A_2」になるので、エンドデータフレームは、偶数番号を有するべきです。また、idカラムのように任意の数の "カラムでグループ化"することができます。

データフレームのためのコードは以下に掲載されています配慮、時間、入力用

df = pd.DataFrame({'id' : [1,1,1,2,2,3,4,5,5,5,5,7,8,9,9] 
        ,'grp' : ['a_1', 'a_2', 'b_1', 'b_2', 'c_1', 'z_1', 'y_1', 'a_1', 'a_2', 'a_1', 'a_2', 'z_1', 'q_1', 'a_2','a_1'] 
        ,'values1' : [i for i in range(2,17,1)] 
        ,'values2' : [i for i in range(4,33,2)] 
        }) 

感謝を!

答えて

1

それとも、簡単な方法と取ることができる:あなたは、単にデータフレーム内の条件を検索することができます

filtered_df = df.ix[(df['grp'] == 'a_1') | (df['grp'] == 'a_2')] 
+0

私はixの方法を知っていますが、didnそれをこの簡単な方法で考えるべきではありません。 idグループ1も含めたいとしましょう。これには1 grpが含まれています。異なる値を含む他のgrpを取っていない、すなわち「b_1」である。 – swepab

+0

また、私のデータには「a_1」、「a_1」、「a_2」という3行のデータがあり、縮小されたデータにidを含めないでください。フレーム! – swepab

+0

別の条件を追加する場合は、上記のテンプレートに従って別の条件を追加することをお勧めします。あなたは食事をするでしょう。 2番目の質問では、インデックスのリセットについて話している場合は、df.reset_index(drop = True、inplace = True)を試してみてください – Wboy

0

を:

reduced_df = df[(df['grp'] == 'a_1') | (df['grp'] == 'a_2')] 
0

私はこのような「偶数」ソリューションを行うために管理、最も効率的ではないかもしれませんが、それは仕事を終えました:

# One row per id 
pivot = df[['id', 'grp', 'values1']].pivot_table('values1', index = 'id', columns = 'grp', aggfunc = (lambda i: i.size)).reset_index() 

# Take out the id rows which fulfills condition of being even numbers 
pivot2 = pivot[pivot[['a_1', 'a_2']].sum(axis = 1) %2 == 0].reset_index() 

# Sub-select rows from original table 
df[df['id'].isin(pivot2['id'])] 
関連する問題