在python pandas中,如何重新采样和插入DataFrame?

Mar*_*ius 6 python interpolation pandas reindex

我有一个pd DataFrame,通常采用以下格式:

   1       2          3          4  
0.1100 0.0000E+00 1.0000E+00 5.0000E+00  
0.1323 7.7444E-05 8.7935E-01 1.0452E+00  
0.1545 4.3548E-04 7.7209E-01 4.5432E-01  
0.1768 1.2130E-03 6.7193E-01 2.6896E-01  
0.1990 2.5349E-03 5.7904E-01 1.8439E-01  
0.2213 4.5260E-03 4.9407E-01 1.3771E-01 
Run Code Online (Sandbox Code Playgroud)

我想要做的是从列表中重新采样列1(索引)值,例如:

indexList = numpy.linspace(0.11, 0.25, 8)
Run Code Online (Sandbox Code Playgroud)

然后我需要从输入DataFrame线性插值第2,3和4列的值(我总是只重新采样/重新索引我的第1列) - 如果需要外推,作为我的最小值/最大值list不一定在我现有的第1列(索引)中.然而,关键点是插值部分.我是python的新手,但我正在考虑使用这样的方法:

  1. output_df = DataFrame.reindex(index = indexList) - 这将主要给出第2-4列的NaN.
  2. 对于index,output_df.iterrows()中的行
    "从DataFrame计算插值/外推值并将它们插入正确的行/列的函数"

不知何故感觉我应该能够使用.interpolate功能,但我无法弄清楚如何.我不能直接使用它 - 它太不准确了,因为在第2-4列中提到的重新索引后的大部分条目都是NaN的; 插值应该在我的初始DataFrame的两个最接近的值内完成.任何好的提示有人吗?(如果我的格式/意图不清楚,请告诉我......)

Ted*_*rou 15

假设列1在索引中,您可以使用原始值和您创建的列表重新索引数据帧,然后使用interpolate填充nan.

df1 = df.reindex(df.index.union(np.linspace(.11,.25,8)))
df1.interpolate('index')

               2         3         4
0.1100  0.000000  1.000000  5.000000
0.1300  0.000069  0.891794  1.453094
0.1323  0.000077  0.879350  1.045200
0.1500  0.000363  0.793832  0.574093
0.1545  0.000435  0.772090  0.454320
0.1700  0.000976  0.702472  0.325482
0.1768  0.001213  0.671930  0.268960
0.1900  0.001999  0.616698  0.218675
0.1990  0.002535  0.579040  0.184390
0.2100  0.003517  0.537127  0.161364
0.2213  0.004526  0.494070  0.137710
0.2300  0.004526  0.494070  0.137710
0.2500  0.004526  0.494070  0.137710
Run Code Online (Sandbox Code Playgroud)