2017-09-25 8 views
0

私は1つの列の値に従ってループ内でサブセットを作成することはできませんでした。ここpandasデータフレームの列の値に応じてループ内のサブセットを作成

は、例えばDFである:

c1  c2  c3 
A   1  2 
A   2  2 
B   0  2 
B   1  1 

Iは全ての行でC1 = A、列2及び3のみを選択し、ループ内

最初の反復をのでようなサブセットを作成したいです、第二、C1 = B、およびのみC2および3

私は次のコードを試した全ての行:

for level in enumerate(df.loc[:,"C1"].unique()): 

    df_s = df.loc[df["C1"]==level].iloc[:, 1:len(df.columns)] 
    #other actions on the subsetted dataframe 
を0

ですが、サブセットは実行されません。 列のレベルthroudh反復するためにどのように

Rでたとえばそれは

for (le in levels(df$C1){ 
dfs <- df[df$C1==le,2:ncol(df)] 
} 

おかげ

答えて

1

を通じてインデックスと値、ちょうどループの両方を提供しますenumerateための必要はありませんでしょう直接c1コラム:

for level in df.c1.unique(): 
    df_s = df.loc[df.c1 == level].drop('c1', 1) 
    print(level + ":\n", df_s) 

#A: 
# c2 c3 
#0 1 2 
#1 2 2 
#B: 
# c2 c3 
#2 0 2 
#3 1 1 

ほとんどの場合、必要なのはdf.groupby('c1').apply(lambda g: ...)です。これはより効率的な方法です。ここでgは、一意のc1値を持つサブデータフレームです。

0
for level in df.loc[:,"c1"].unique(): 
    print(level) 
    df_s = df.loc[df["c1"]==level,:].iloc[:,1:len(df)] 

    print(df_s) 

A 
    c2 c3 
0 1 2 
1 2 2 
B 
    c2 c3 
2 0 2 
3 1 1 

または

for level in df.loc[:,"c1"].unique(): 
    print(level) 
    df_s = df.loc[df["c1"]==level,df.columns[1:len(df)]] 
    print(df_s) 
+0

私が代わりに同じ行の私の.locと.ilocの同じ呼び出しで行と列のサブセットにどのようにも探していた(これは、より多くのRのようなものです)コード。 – Boidot

+0

@Boidot Psidomの答えをチェックすることができます。 – Wen

関連する問題