如何在Pandas bygroup中应用linregress

use*_*866 6 python pandas

我想在Pandas ByGroup中应用scipy.stats.linregress.我查看了文档,但我能看到的是如何将某些内容应用于单个列

grouped.agg(np.sum)
Run Code Online (Sandbox Code Playgroud)

或类似的功能

grouped.agg('D' : lambda x: np.std(x, ddof=1)) 
Run Code Online (Sandbox Code Playgroud)

但是如何应用具有两个输入X和Y的linregress?

And*_*den 7

linregress函数以及许多其他scipy/numpy函数接受"类似数组"的X和Y,Series和DataFrame都可以获得资格.

例如:

from scipy.stats import linregress
X = pd.Series(np.arange(10))
Y = pd.Series(np.arange(10))

In [4]: linregress(X, Y)
Out[4]: (1.0, 0.0, 1.0, 4.3749999999999517e-80, 0.0)
Run Code Online (Sandbox Code Playgroud)

事实上,能够使用scipy(和numpy)功能是熊猫杀手功能之一!

因此,如果您有一个DataFrame,您可以在其列(系列)上使用linregress:

linregress(df['col_X'], df['col_Y'])
Run Code Online (Sandbox Code Playgroud)

如果使用groupby,你可以类似地apply(对每个组):

grouped.apply(lambda x: linregress(x['col_X'], x['col_Y']))
Run Code Online (Sandbox Code Playgroud)