如何在Pandas按组应用linregress

7 投票
1 回答
7843 浏览
提问于 2025-04-17 15:15

我想在Pandas的分组中使用scipy.stats.linregress这个函数。我查阅了相关文档,但我看到的都是如何对单个列进行操作,比如

grouped.agg(np.sum)

或者像这样使用一个函数

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

但是我该如何使用linregress这个函数,它需要两个输入X和Y呢?

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(这些列其实就是Series):

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

如果你使用groupby的话,也可以对每个组进行类似的apply操作:

grouped.apply(lambda x: linregress(x['col_X'], x['col_Y']))

撰写回答