Python 对于间距不均匀的点列表,用零填充缺少的值

Python 对于间距不均匀的点列表,用零填充缺少的值,python,pandas,numpy,plot,interpolation,Python,Pandas,Numpy,Plot,Interpolation,我将一组点保存为数据帧dp: xlist ylist 0 0.017108 0.902494 1 0.019659 0.741981 2 0.030310 0.920884 3 0.032064 0.255826 4 0.046168 0.562761 5 0.060758 0.583044 6 0.118274 1.000000 7 0.125385 1.000000 8 0.140418 1.000

我将一组点保存为数据帧dp

xlist   ylist
0   0.017108    0.902494
1   0.019659    0.741981
2   0.030310    0.920884
3   0.032064    0.255826
4   0.046168    0.562761
5   0.060758    0.583044
6   0.118274    1.000000
7   0.125385    1.000000
8   0.140418    1.000000
9   0.153699    1.000000
10  0.186998    0.293743
11  0.215375    0.112288
12  0.217875    0.260883
13  0.250591    0.325953
14  0.262788    0.084916
15  0.287382    0.104910
16  0.325902    0.088418
17  0.377885    0.312025
18  0.473086    0.068632
19  0.485449    0.059624
20  0.557334    0.734376
21  0.572133    0.709392
22  0.610553    0.840687
23  0.626902    0.737930
24  0.630276    0.084787
25  0.637779    0.091535
26  0.717553    0.074411
27  0.742187    0.092770
28  0.757873    0.532881
29  0.780933    0.528202
30  0.836708    0.422615
31  0.920814    0.359896
32  0.938639    0.355241
33  0.954564    0.280989
34  0.978567    0.649749
35  0.995067    0.769272
使用pyplot.vline时,它们看起来像这样:

[plt.vlines(x,0,y) for x,y in zip(dp.xlist, dp.ylist)]
plt.show()
我想用以下内容替换xlist

x = linspace(0,1,num=100) ###(or num=200... not important)
并使用y列表中的值创建一个新的y,其中x接近xlist,其他地方为零。
到目前为止,我所尝试的是,对于每对xlist,ylist值,我检查线性空间中是否有一个点与xlist中的点足够接近,然后将其指定为ylist的相应值,否则,我将设置为零

for i in dp.index:

    fill = [] 

    for xa in x:
        if abs(dp.xlist[i]-xa)<0.001:
            tmp = dp.ylist[i]
        else:
            tmp = 0
        fill.append(tmp)
dp.index中i的
:
填充=[]
对于x中的xa:
如果abs(dp.xlist[i]-xa)这看起来不错

是的,您正在覆盖每个
i
的填充。但是您也为每个xa添加了tmp。我不太知道你的x是什么。但是试试看:

fill = [] 
for i in dp.index:
    tmp = 0
    for xa in x:
        if abs(dp.xlist[i]-xa)<0.001:
            tmp = dp.ylist[i]
    fill.append(tmp)
fill=[]
对于dp.index中的i:
tmp=0
对于x中的xa:

如果abs(dp.xlist[i]-xa)不需要循环。您可以使用以下方法:

dp['x_lin'] = x[np.abs(np.subtract.outer(x,dp.xlist.values)).argmin(0)]
dp['y_lin'] = 0
dp.y_lin[np.abs(dp.x_lin-dp.xlist)<0.001] = dp.ylist
输出:

       xlist     ylist     x_lin     y_lin
0   0.017108  0.902494  0.020202  0.000000
1   0.019659  0.741981  0.020202  0.741981
2   0.030310  0.920884  0.030303  0.920884
3   0.032064  0.255826  0.030303  0.000000
4   0.046168  0.562761  0.050505  0.000000
5   0.060758  0.583044  0.060606  0.583044
6   0.118274  1.000000  0.121212  0.000000
7   0.125385  1.000000  0.121212  0.000000
8   0.140418  1.000000  0.141414  1.000000
9   0.153699  1.000000  0.151515  0.000000
10  0.186998  0.293743  0.191919  0.000000
11  0.215375  0.112288  0.212121  0.000000
12  0.217875  0.260883  0.222222  0.000000
13  0.250591  0.325953  0.252525  0.000000
14  0.262788  0.084916  0.262626  0.084916
15  0.287382  0.104910  0.282828  0.000000
16  0.325902  0.088418  0.323232  0.000000
17  0.377885  0.312025  0.373737  0.000000
18  0.473086  0.068632  0.474747  0.000000
19  0.485449  0.059624  0.484848  0.059624
20  0.557334  0.734376  0.555556  0.000000
21  0.572133  0.709392  0.575758  0.000000
22  0.610553  0.840687  0.606061  0.000000
23  0.626902  0.737930  0.626263  0.737930
24  0.630276  0.084787  0.626263  0.000000
25  0.637779  0.091535  0.636364  0.000000
26  0.717553  0.074411  0.717172  0.074411
27  0.742187  0.092770  0.737374  0.000000
28  0.757873  0.532881  0.757576  0.532881
29  0.780933  0.528202  0.777778  0.000000
30  0.836708  0.422615  0.838384  0.000000
31  0.920814  0.359896  0.919192  0.000000
32  0.938639  0.355241  0.939394  0.355241
33  0.954564  0.280989  0.959596  0.000000
34  0.978567  0.649749  0.979798  0.000000
35  0.995067  0.769272  1.000000  0.000000
输出图:


您试过其中任何一种吗:,?谢谢,但我认为这不是实现我所需的最佳方法,它不起作用。
       xlist     ylist     x_lin     y_lin
0   0.017108  0.902494  0.020202  0.000000
1   0.019659  0.741981  0.020202  0.741981
2   0.030310  0.920884  0.030303  0.920884
3   0.032064  0.255826  0.030303  0.000000
4   0.046168  0.562761  0.050505  0.000000
5   0.060758  0.583044  0.060606  0.583044
6   0.118274  1.000000  0.121212  0.000000
7   0.125385  1.000000  0.121212  0.000000
8   0.140418  1.000000  0.141414  1.000000
9   0.153699  1.000000  0.151515  0.000000
10  0.186998  0.293743  0.191919  0.000000
11  0.215375  0.112288  0.212121  0.000000
12  0.217875  0.260883  0.222222  0.000000
13  0.250591  0.325953  0.252525  0.000000
14  0.262788  0.084916  0.262626  0.084916
15  0.287382  0.104910  0.282828  0.000000
16  0.325902  0.088418  0.323232  0.000000
17  0.377885  0.312025  0.373737  0.000000
18  0.473086  0.068632  0.474747  0.000000
19  0.485449  0.059624  0.484848  0.059624
20  0.557334  0.734376  0.555556  0.000000
21  0.572133  0.709392  0.575758  0.000000
22  0.610553  0.840687  0.606061  0.000000
23  0.626902  0.737930  0.626263  0.737930
24  0.630276  0.084787  0.626263  0.000000
25  0.637779  0.091535  0.636364  0.000000
26  0.717553  0.074411  0.717172  0.074411
27  0.742187  0.092770  0.737374  0.000000
28  0.757873  0.532881  0.757576  0.532881
29  0.780933  0.528202  0.777778  0.000000
30  0.836708  0.422615  0.838384  0.000000
31  0.920814  0.359896  0.919192  0.000000
32  0.938639  0.355241  0.939394  0.355241
33  0.954564  0.280989  0.959596  0.000000
34  0.978567  0.649749  0.979798  0.000000
35  0.995067  0.769272  1.000000  0.000000