Вы можете сделать что-то вроде:
res = df.groupby('Test_event')[['x','y']].apply(linregress).apply(pd.Series)
res.columns = ['slope','intercept','rvalue','pvalue','stderror']
Хотя цепочка apply
не идеальна
Пример:
>>> df
Test_event x y
0 5 1 4
1 5 1 5
2 5 2 6
3 6 3 8
4 6 4 10
5 6 5 11
>>> res = df.groupby('Test_event')[['x','y']].apply(linregress).apply(pd.Series)
>>> res.columns = ['slope','intercept','rvalue','pvalue','stderror']
>>> res
slope intercept rvalue pvalue stderror
Test_event
5 1.5 3.000000 0.866025 0.333333 0.866025
6 1.5 3.666667 0.981981 0.121038 0.288675
В качестве альтернативыВы могли бы сделать это, но я не уверен, что это более эффективно:
res = (df.groupby('Test_event')
.apply(lambda group: pd.Series(linregress(group['x'],group['y']))))
res.columns = ['slope','intercept','rvalue','pvalue','stderror']