2016-10-25 11 views
2

私はいくつかの列がカテゴリデータを表すデータフレームを持っています。それぞれの組み合わせに基づいて分割したいと思います。複数のデータフレームにパンダを分割する

In [394]: df.head(10) 
Out[394]: 
     existing priority State payment 
0    Y   N  FL 10.4 
1    N   N  CA 918.0 
2    Y   N  CA 493.0 
3    Y   N  FL 743.2 
4    Y   Y  CA 898.0 
5    N   N  CA -237.0 
6    Y   Y  CA 510.0 
7    N   N  CA -480.0 
8    Y   N  FL -125.0 
9    Y   Y  CA 211.0 

私は最初の三つの変数、すなわちの1つの組み合わせのすべてのエントリが含ま1つのデータフレームがしたい::以下は私が持っているものの簡易版である

  existing priority State payment 
0    Y   N  FL 10.4 
1    Y   N  FL 743.2 
2    Y   N  FL -125.0 

を...とその後各組み合わせ...

  existing priority State payment 
0    N   N  CA 918.0 
1    N   N  CA -237.0 
2    N   N  CA -480.0 

...など。これを行う方法はありますか?命名規則を自動化して、各変数の組み合わせの名前を含めることができますか?

私がここで尋ねていることに曖昧さがある場合は教えてください。

+1

あなたはDFSを分割する必要がありますか?これらのcolでグループ化するだけで、グループ 'gp = df.groupby(['existing'、 'priority'、 'State'])groups = gp.groups'を取得した後、' gp 'を使って各グループを得ることができます。 get_group(group_name) ' – EdChum

+0

私はそれらを分割する必要があります。その目的は、分割後に注文し、その注文に基づいて操作を実行することです。分割は、同じグループにない2つの行、すなわち「N、N、CA」行から「Y、N、FL」行を引く操作を防止する。 – AnthonySCaldera

答えて

0

@EdChumは正しいです。あなたが想像していることを適切に分割して考えることは難しいです。


@EdChumの答え

cols = ['existing', 'priority', 'State'] 
grps = df.groupby(cols) 
gnms = grps.groups.keys() 
grpd = grps.apply(pd.DataFrame.reset_index, drop=True) 

for name in gnms: 
    print('\n{}\n\n{}\n'.format(name, grpd.loc[name])) 

('Y', 'N', 'FL') 

    existing priority State payment 
0  Y  N FL  10.4 
1  Y  N FL 743.2 
2  Y  N FL -125.0 


('Y', 'Y', 'CA') 

    existing priority State payment 
0  Y  Y CA 898.0 
1  Y  Y CA 510.0 
2  Y  Y CA 211.0 


('Y', 'N', 'CA') 

    existing priority State payment 
0  Y  N CA 493.0 


('N', 'N', 'CA') 

    existing priority State payment 
0  N  N CA 918.0 
1  N  N CA -237.0 
2  N  N CA -480.0 
+0

ありがとうございます@piRSquared。それでも新しいこと、そして私の頭の中にあるものは、しばしば正しいコーディングとはかけ離れています。とても有難い! – AnthonySCaldera

関連する問題