仅在唯一列id上循环函数

2024-06-16 13:04:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码可以计算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值运行函数。我的输出应该是:

^{pr2}$

我知道scipy有一个theil-slope函数,但这是一个错误的计算。在

提前谢谢。在


Tags: 函数innumpyforzerosrangeslopeii
1条回答
网友
1楼 · 发布于 2024-06-16 13:04:02

您可以使用numpy.unique()来获取工作站标识中的唯一值,然后在它们上循环:

for id in numpy.unique(station_id):
    print id, theil_sen(year[station_id == id], Sum[station_id == id])

或者,您可能想看看pandas,它支持csv和{}功能。在

相关问题 更多 >