【发布时间】:2013-12-31 04:44:25
【问题描述】:
我想对较小的数据帧时间序列的每一列分别进行样条插值,以创建比原始数据帧更大尺寸的更精细解析的数据帧时间序列。
因此,理想情况下,代码看起来与此类似(在伪代码中):
from scipy.interpolate import UnivariateSpline as Spline
import pandas as pd
few_times = pd.date_range(t0, t1, periods=10)
few_times_for_spline = few_times.values.astype('float')
many_times = pd.date_range(t0, t1, periods=1000)
many_times_for_spline = many_times.values.astype('float')
df_to_interp = pd.DataFrame(randn(10,100), index=few_times)
def do_spline(col):
return Spline(few_times_for_spline, col)(many_times_for_spline)
df_to_interp.apply(do_spline)
但这给了我错误,因为这些维度不能强制转换为原始数据框维度。我有点困惑为什么它不起作用,因为 df.groupby().apply() 允许更改返回值的维度。
到目前为止,我的解决方案是使用纯 numpy 并使用其函数 apply_along_axis:
pd.DataFrame(apply_along_axis(do_spline,
0,
df_to_interp.values),
index=many_times,
columns=df_to_interp.columns)
但我想知道是否没有更多的panda-esque 解决方案?
【问题讨论】: