2017-02-10 13 views
1

デフmy_per_group_func(TEMP):ここPython Pandasでgroupby-apply-aggregateをデータフレームに戻す方法は?

# apply some tricks here 
    return a, b, c, d 

output = dataframe.groupby('group_id').apply(my_per_group_func) 

私の質問には、いくつかの列名(明らかにデータフレームのインデックスがGROUP_IDされる)とバックデータフレームに「出力」に集約する方法ですか?

は、通常、私は何をすべきか、集計関数に

を使用することですが、ここで問題がmy_per_group_funcはここに非常に複雑であるということです、それは誰もが持っているん通常は「集約」関数の構文に

を使用して行うことができません手掛かり?

おかげ

答えて

0
dataframe['new column name'] = dataframe.groupby('group_id').transform(my_per_group_func) 
+2

多分あなたはあなたの答えに関するいくつかのコンテキストを提供することができ、なぜこれが解決します問題? – sadmicrowave

0

DataFrameまたはSeriesを返す必要がそうです - flexible apply docsを確認してください。

dataframe = pd.DataFrame({'group_id':[1,1,3], 
        'B':[4,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5], 
        'E':[5,3,6], 
        'F':[7,4,3]}) 

print (dataframe) 
    B C D E F group_id 
0 4 7 1 5 7   1 
1 5 8 3 3 4   1 
2 6 9 5 6 3   3 

def my_per_group_func(x): 
    #print (x) 
    #some sample operations 
    a = x.B + x.C 
    b = x.E + x.B 
    c = x.D + x.F 
    d = x.F + x.E 
    return pd.DataFrame({'group_id': x.group_id, 'a':a, 'b':b, 'c':c, 'd':d}) 

output = dataframe.groupby('group_id').apply(my_per_group_func) 
print (output) 
    a b c d group_id 
0 11 9 8 12   1 
1 13 8 7 7   1 
2 15 12 8 9   3 

def my_per_group_func(x): 
    #print (x) 
    #some sample aggregations 
    a = (x.B + x.C).mean() 
    b = (x.E + x.B).sum() 
    c = (x.D + x.F).median() 
    d = (x.F + x.E).std() 
    return pd.Series([a,b,c,d], index=['a','b','c','d']) 

output = dataframe.groupby('group_id').apply(my_per_group_func) 
print (output) 
      a  b c   d 
group_id       
1   12.0 17.0 7.5 3.535534 
3   15.0 12.0 8.0  NaN 
関連する問題