Вы можете преобразовать вывод в list
с, а затем в DataFrame
с помощью конструктора:
def my_agg(x):
x = x.values.reshape([x.shape[0] // 2,2])
return [np.sum(x[:,0] * x[:,1]), np.mean(x[:,0] * x[:,1])]
s = df.set_index('group').stack().groupby('group').apply(my_agg)
df1 = pd.DataFrame(s.values.tolist(), index=s.index, columns=['a','b'])
print (df1)
a b
group
0 2.210601 0.552650
1 0.335913 0.111971
2 1.696796 0.565599
Или вы можете вернуть Series
, а затем unstack
, но это будет медленнее:
def my_agg(x):
x = x.values.reshape([x.shape[0] // 2,2])
return pd.Series([np.sum(x[:,0] * x[:,1]), np.mean(x[:,0] * x[:,1])], index=['a','b'])
df1 = df.set_index('group').stack().groupby('group').apply(my_agg).unstack()
print (df1)
a b
group
0 0.391921 0.097980
1 0.417366 0.139122
2 0.788845 0.262948