パンダでは、同じデータセットでマルチステップ/シーケンシャル集約を行う方法はありますか?各ステップが次のものの「副問い合わせ」であるかのように。パンダのデータフレームにおける複数ステップの集計
は、私がこのようにSQLで考えることができ:
import pandas
import numpy
numpy.random.seed(1)
df = pandas.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : numpy.random.randn(8),
'D' : numpy.random.randn(8)})
私が集約しようとしました:
SELECT x.A, COUNT(x.B) as B_COUNT, SUM(x.C_SUM) as C_SUM
FROM (
SELECT df.A, df.B, SUM(df.C) as C_SUM
FROM df
GROUP BY df.A, df.B
) x
GROUP BY x.A
Python3.4とPandas0.19.2での作業は、私はこのようなデータフレームを持っていますA、Bレベルに変換し、そのデータフレームを処理します(ただしインデックスは 'C'、カラム 'A'はキーのリストにないのでKeyErrorをスローします)。
A_B_AGG = df.groupby(['A','B']).C.sum().to_frame()
A_B_AGG.keys()
#Index(['C'], dtype='object')
#Would like to do this, but throws KeyError
end_result = A_B_AGG.groupby('A').B.size()
最終的に、私は次のようになります何かを得る必要があります...
A B_COUNT C_SUM
bar 3 -3.986264
foo 3 2.945186
は、これを行うための適切な、パンダの途中で何らかの指導をありがとう!
あなたは 'C.sumは()'何が他の列に起こるのですか? 'D'列はどうなりますか?あなたはgroupbyをするときにいくつかの列を集約し、他を残すことはできますか? – MYGz
@MYGzこれらは無視されます。 groupby(...)を実行すると、Cはグループ変数とともに列 'C'を選択したことを意味します。 – Psidom
ありがとう!だから、別の列に異なる種類の集約が必要な場合は、 '.agg()'を使用する必要があります。 – MYGz