2016-03-29 5 views
2

私はpandas groupby documentationを読んでみましたが、私はそれに従うことができません(もっと例が必要です)。私は、次のデータフレームを持っている:パンダの列による集計を作成するにはどうすればよいですか?

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 
          'foo', 'bar', 'foo', 'foo'], 
        'B' : ['one', 'one', 'two', 'three', 
          'two', 'two', 'one', 'three'], 
        'C' : np.random.randn(8), 
        'D' : np.random.randn(8)}) 

私は1つの列、および他の列のC/Dの合計値でCの合計値を持つ2つの列、foobarを持つ新しいデータフレームを、したいです。このように、例えば:

A  C  C_over_D 
'foo' 1.2 3.4 
'bar' 2.3 5.4 

私はちょうど約このようなCの合計値を取得することができます:

df = df.groupby('A')['C'].sum() 

これはCのためノー列名をバック私にデータオブジェクトを与えるが:

A 
bar -0.821788 
foo -6.006086 

しかし、これをどのように拡張して、(a)Cの列で適切なデータフレームを返すのですか?(b)Cの値をDに戻しますか?

答えて

1

あなたがCあなたの列に、あなたが作成する必要があり、列C/Dためaggregationが必要IIUC:

np.random.seed(632) 
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 
          'foo', 'bar', 'foo', 'foo'], 
        'B' : ['one', 'one', 'two', 'three', 
          'two', 'two', 'one', 'three'], 
        'C' : np.random.randn(8), 
        'D' : np.random.randn(8)}) 

df['C/D'] = df['C']/df['D'] 

In [293]: df.groupby('A')['C', 'C/D'].agg(sum) 
Out[293]: 
      C  C/D 
A 
bar 0.060808 -8.173028 
foo -1.461735 -0.058941 

フラットデータフレームのために、あなたもreset_indexを使用することができます。

In [294]: df.groupby('A')['C', 'C/D'].agg(sum).reset_index() 
Out[294]: 
    A   C  C/D 
0 bar 0.060808 -8.173028 
1 foo -1.461735 -0.058941 
関連する問題