После обсуждения некоторых недоразумений в комментариях я думаю, что смогу найти решение. Пример выходных данных для точки времени измерения 05.08.1968 23: 59: 00
Пример выходных данных
Out[20]:
depth temp salt
1968-05-08 23:59:00 -235 5.766500 12.716000
1968-05-08 23:59:00 -230 5.764000 12.706000
1968-05-08 23:59:00 -225 5.761500 12.696000
1968-05-08 23:59:00 -220 5.752000 12.683000
1968-05-08 23:59:00 -215 5.732000 12.665500
1968-05-08 23:59:00 -210 5.712000 12.648000
1968-05-08 23:59:00 -205 5.692000 12.630500
1968-05-08 23:59:00 -200 5.675200 12.607200
...
1968-05-08 23:59:00 -40 2.985000 7.580000
1968-05-08 23:59:00 -35 3.282500 7.550000
1968-05-08 23:59:00 -30 3.580000 7.520000
1968-05-08 23:59:00 -25 3.797500 7.502500
1968-05-08 23:59:00 -20 4.015000 7.485000
1968-05-08 23:59:00 -15 4.232500 7.467500
1968-05-08 23:59:00 -10 4.450000 7.450000
1968-05-08 23:59:00 -5 4.516667 7.450000
Решение Для В своем окончательном кодовом решении я изменяю индекс на datetime
объект, использую groupby()
для итерации по всем точкам времени измерения, а затем используем np.interp()
для интерполяции. Результаты сохраняются в список pandas DataFrame и, наконец, объединяются в один кадр данных с interpolated_df = pd.concat(results)
import pandas as pd
from pathlib import Path
import numpy as np
df = pd.read_csv(Path("C:/Test/obs.csv"))
df['date'] = pd.to_datetime(df['date'])
df_nid=df.set_index('date')
# timepoints = df_nid['1968-05-08 23'].groupby('date')
timepoints = df_nid.groupby('date')
results = []
x = np.arange(-235,0,5)
for name, time in timepoints:
time =time.sort_values('depth')
xp = time['depth']
yp_temp = time['temp']
y_temp = np.interp(x,xp,yp_temp)
yp_salt = time['salt']
y_salt = np.interp(x, xp, yp_salt)
data = {'depth':x,
'temp':y_temp,
'salt':y_salt}
# Create 47 x copies of the current Timestamps as index [-235:0:5] Steps
idx = [name] * len(x)
results.append(pd.DataFrame(data=data,index=idx))
interpolated_df = pd.concat(results)