2016-07-25 8 views
1

2つの変数でグループ化し、それらの変数内で計算を実行するデータフレームがあります。明らかに、はるかに効率的Pandas DataFrameでの計算をgroupbyで行い、それをDataFrameに戻しますか?

df=pd.DataFrame({'A':[1,1,1,2,2,2,30,12,122,345], 
'B':[1,1,1,2,3,3,3,2,3,4], 
'C':[101,230,12,122,345,23,943,83,923,10]}) 

total = [] 
avg = [] 
AID = [] 
BID = [] 
for name, group in df.groupby(['A', 'B']): 
    total.append(group.C.sum()) 
    avg.append(group.C.sum()/group.C.nunique()) 
    AID.append(name[0]) 
    BID.append(name[1]) 

x = pd.DataFrame({'total':total,'avg':avg,'AID':AID,'BID':BID}) 

しかし、これを行うと、すなわち、このように、BACK私は終わりだデータフレームに情報を置くための簡単な方法はありますか?

答えて

2

あなたはgroupbypandasの集計関数を使用することができます。

私はこのように感じる
import pandas as pd 
import numpy as np 
df.groupby(['A', 'B'])['C'].agg({'total': np.sum, 'avg': np.mean}).reset_index() 

#  A B total   avg 
# 0 1 1  343 114.333333 
# 1 2 2  122 122.000000 
# 2 2 3  368 184.000000 
# 3 12 2  83 83.000000 
# 4 30 3  943 943.000000 
# 5 122 3  923 923.000000 
# 6 345 4  10 10.000000 
+0

が答えですが、私はもう一つの疑問を持っている - のは、「AVGは本当にユニークで割った値の合計()であるとしましょう他の列の要素 - どのように他の列を参照しますか? np.sum/np.unique(グループ['other_column'])?それは理にかなっていますか? – user1566200

+0

私はおそらく2つのステップでそれを行うでしょう。 'df1 = df.groupby(['A'、 'B'])['C']。agg({'合計':np.sum}); df1 ['avg'] = df1.total/df.groupby(['A'、 'B'])['other']。 df1.reset_index() 'のようなものです。 – Psidom

関連する問題