我想在Pandas ByGroup中应用scipy.stats.linregress。我查看了文档,但我能看到的是如何将某些内容应用于单个列,如
grouped.agg(np.sum)
或类似
的功能grouped.agg('D' : lambda x: np.std(x, ddof=1))
但是如何应用具有两个输入X和Y的linregress?
答案 0 :(得分:6)
linregress
函数以及许多其他scipy / numpy函数接受" array-like" X和Y,系列和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)功能是熊猫杀手功能之一!
因此,如果您有一个DataFrame,您可以在其列(系列)上使用linregress:
linregress(df['col_X'], df['col_Y'])
如果使用groupby,您可以类似地apply
(对每个组):
grouped.apply(lambda x: linregress(x['col_X'], x['col_Y']))