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