2017-11-18 2 views
1

df.groupby('croho subonderdeel').sum()グループはその後、

出力上の和を取るからである。

df.groupby('croho subonderdeel').sum() 

私は、カテゴリごとの総卒業生の合計を取ったが、私は同様に、列ごとにそれをやってみたいです。たとえば、最初の列「2011 MAN」の出力を受け取ります。

私は次のことを試してみました:

df.groupby('croho subonderdeel','2011 MAN').sum() 

その後、私は次のエラーを取得する:

ValueError: No axis named 2011 MAN for object type <class 'pandas.core.frame.DataFrame'> 

その後、私は私が「2011 MAN」の総和を取る必要があり、代わりに二回グループ化するかもしれないと思いました。だから私は試してみました:

df.groupby('croho subonderdeel').sum('2011 MAN') 

をそれから私は、このエラーが表示されます。私はしようとしている両方の方法が不可能な理由

TypeError: f() takes 1 positional argument but 2 were given 

誰かが、私に説明できますか?多分私は自分で問題を解決することができます。

答えて

2

あなたが好き[]で列を指定する必要があります:あなたはまた、複数の列を指定することができます

df.groupby('croho subonderdeel')['2011 MAN'].sum() 

df.groupby('croho subonderdeel')['2011 MAN', '2012 MAN'].sum() 

また必要2 columns出力はパラメータas_index=False追加する場合:

df.groupby('croho subonderdeel', as_index=False)['2011 MAN'].sum() 

かを:

df.groupby('croho subonderdeel')['2011 MAN'].sum().reset_index() 

しかし、2つのカテゴリー(2列)によって、希望グループが追加した場合[]groupbyへ:

df.groupby(['croho subonderdeel', 'another col'])['2011 MAN'].sum() 

サンプル:

df = pd.DataFrame({'another col':list('efefef'), 
        '2011 MAN':[4,5,4,5,5,4], 
        '2011 WROUW':[7,8,9,4,2,3], 
        '2012 MAN':[1,3,5,7,1,0], 
        '2012 WROUW':[5,3,6,9,2,4], 
        'croho subonderdeel':list('aaabbb')}) 

print (df) 
    2011 MAN 2011 WROUW 2012 MAN 2012 WROUW another col croho subonderdeel 
0   4   7   1   5   e     a 
1   5   8   3   3   f     a 
2   4   9   5   6   e     a 
3   5   4   7   9   f     b 
4   5   2   1   2   e     b 
5   4   3   0   4   f     b 

print(df.groupby('croho subonderdeel')['2011 MAN'].sum()) 
croho subonderdeel 
a 13 
b 14 
Name: 2011 MAN, dtype: int64 

print(df.groupby('croho subonderdeel', as_index=False)['2011 MAN'].sum()) 
    croho subonderdeel 2011 MAN 
0     a  13 
1     b  14 

print(df.groupby('croho subonderdeel')['2011 MAN'].sum().reset_index()) 
    croho subonderdeel 2011 MAN 
0     a  13 
1     b  14 

print(df.groupby('croho subonderdeel')['2011 MAN', '2012 WROUW'].sum()) 
        2011 MAN 2012 WROUW 
croho subonderdeel      
a       13   14 
b       14   15 

print(df.groupby('croho subonderdeel', as_index=False)['2011 MAN', '2012 WROUW'].sum()) 
    croho subonderdeel 2011 MAN 2012 WROUW 
0     a  13   14 
1     b  14   15 

print (df.groupby(['croho subonderdeel', 'another col'])['2011 MAN'].sum()) 
croho subonderdeel another col 
a     e    8 
        f    5 
b     e    5 
        f    9 
Name: 2011 MAN, dtype: int64 

print (df.groupby(['croho subonderdeel', 'another col'], as_index=False)['2011 MAN'].sum()) 
    croho subonderdeel another col 2011 MAN 
0     a   e   8 
1     a   f   5 
2     b   e   5 
3     b   f   9 

print (df.groupby(['croho subonderdeel', 'another col']).sum()) 
           2011 MAN 2011 WROUW 2012 MAN 2012 WROUW 
croho subonderdeel another col            
a     e     8   16   6   11 
        f     5   8   3   3 
b     e     5   2   1   2 
        f     9   7   7   13 

print (df.groupby(['croho subonderdeel', 'another col'], as_index=False).sum()) 
croho subonderdeel another col 2011 MAN 2011 WROUW 2012 MAN 2012 WROUW 
0     a   e   8   16   6   11 
1     a   f   5   8   3   3 
2     b   e   5   2   1   2 
3     b   f   9   7   7   13 
+0

それは働きます!なぜ「2011 MAN」は大括弧で囲む必要があり、「croho subonderdeel」ではないのですか? 'croho subonderdeel'も同様の列ですが、丸括弧だけを置くと機能します。 –

+1

これは2つの異なることです - 'groupby'で2列を使用し、2列でグループ化し、' function 'groupbyの外側で集約の列を指定する場合は '[]'を使用します。 – jezrael

+0

SQLのように、いっぱいになったすべてのセルに対して 'reset_index()'を追加することもできます。 – harshil9968