7

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

grouped.agg(np.sum)

或类似的功能

grouped.agg('D' : lambda x: np.std(x, ddof=1)) 

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

4

1 回答 1

8

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)

事实上,能够使用 scipy(和 numpy)函数是 pandas 的杀手级功能之一!

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

linregress(df['col_X'], df['col_Y'])

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

grouped.apply(lambda x: linregress(x['col_X'], x['col_Y']))
于 2013-02-08T15:14:38.910 回答