如何在Pandas按组应用linregress
我想在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']))