我想在 Pandas ByGroup 中应用 scipy.stats.linregress。我查看了文档,但我只能看到如何将某些内容应用于单个列,例如
grouped.agg(np.sum)
或类似的功能
grouped.agg('D' : lambda x: np.std(x, ddof=1))
但是如何应用具有两个输入 X 和 Y 的 linregress?
该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']))