2016-08-19 9 views
3

は、以下の点を考慮しdf数値および非数値データ型の両方でGROUPBYオーバー以内に合計する方法

df = pd.DataFrame([ 
     ['X', 'a', 0, 1], 
     ['X', 'b', 2, 3], 
     ['X', 'c', 4, 5], 
     ['Y', 'a', 6, 7], 
     ['Y', 'b', 8, 9], 
     ['Y', 'c', 10, 11], 
    ], columns=['One', 'Two', 'Three', 'Four']) 
df 

enter image description here

df.dtypes 

One  object 
Two  object 
Three  int64 
Four  int64 
dtype: object 

私は私がsumがそれぞれの上にどうなるのかを取得df.sum()とき列の

df.sum() 

One  XXXYYY 
Two  abcabc 
Three  30 
Four   36 
dtype: object 

ただし、これはgroupbyで実行したいと思います。私は、これは

df.groupby('One').sum() 

enter image description here

を動作することを期待したい。しかし、それは、数値カラム上で合計のみに表示されます。 df.sum()と同じ集計を実行する便利な方法は何ですか?

私はそれはlambdaaggを使用して、所望の結果を達成することが可能です

pd.concat([df.set_index('One').loc[i].sum() for i in ['X', 'Y']], 
      axis=1, keys=['X', 'Y']).T.rename_axis('One') 

enter image description here

+0

[OK]を、私はそれをupvote。 ';) – jezrael

+0

と質問;) – jezrael

答えて

4

この結果を期待したい:

In [6]: 
df.groupby('One').agg(lambda x: x.sum()) 

Out[6]: 
    Two Three Four 
One     
X abc  6  9 
Y abc  24 27 
関連する問題