我有一个代码可以计算x和y变量的斜率(theil sen slope),我想在一个基于csv文件中特定列值的值列表上运行这个代码。我的文件如下:
station_id year Sum
210018 1917 329.946
210018 1918 442.214
210018 1919 562.864
210018 1920 396.748
210018 1921 604.266
210019 1917 400.946
210019 1918 442.214
210019 1919 600.864
210019 1920 250.748
210019 1921 100.266
我使用的函数是:
def theil_sen(x,y):
n = len(x)
ord = numpy.argsort(x)
xs = x[ord]
ys = y[ord]
vec1 = numpy.zeros( (n,n) )
for ii in range(n):
for jj in range(n):
vec1[ii,jj] = ys[ii]-ys[jj]
vec2 = numpy.zeros( (n,n) )
for ii in range(n):
for jj in range(n):
vec2[ii,jj] = xs[ii]-xs[jj]
v1 = vec1[vec2>0]
v2 = vec2[vec2>0]
slope = numpy.median( v1/v2 )
coef = numpy.zeros( (2,1) )
b_0 = numpy.median(y)-slope*numpy.median(x)
b_1 = slope
res = y-b_1*x-b_0 # residuals
return (b_0,b_1,res)
我想使用Sum
作为函数中的y值,year
作为x值,并且只对每个唯一的station_id
值运行函数。我的输出应该是:
我知道scipy有一个theil-slope函数,但这是一个错误的计算。在
提前谢谢。在
您可以使用
numpy.unique()
来获取工作站标识中的唯一值,然后在它们上循环:或者,您可能想看看}功能。在
pandas
,它支持csv
和{相关问题 更多 >
编程相关推荐