【问题标题】:pandas adding a interpolator function conditionally as a new column熊猫有条件地添加插值器函数作为新列
【发布时间】:2022-01-08 04:29:45
【问题描述】:

我创建了一系列5个scipycubic spline(插值器类型)对象如下:

from scipy.interpolate import CubicSpline
def spline3(df, col1, col2):
    x, y = df[col1].values, df[col2].values
    cs = CubicSpline(x, y, bc_type='natural')
    return cs
# indexed series of spline obj
splines = avg_df.groupby('group').apply(spline3, 'tenor', 'mid')

导致:

    splines
    Out[129]: 
    group
    A     <scipy.interpolate._cubic.CubicSpline object a...
    B    <scipy.interpolate._cubic.CubicSpline object a...
    C    <scipy.interpolate._cubic.CubicSpline object a...
    D    <scipy.interpolate._cubic.CubicSpline object a...
    E    <scipy.interpolate._cubic.CubicSpline object a...
    dtype: object

即,它们将为相同的输入 x 产生不同的插值,如下所示。如何应用它来把这个最小的数据集说成一个新的列:

toy = pd.DataFrame({
    'group': ['A', 'A', 'E'],
    'months': [11.04, 11.89, 7.51]
    })

toy
Out[132]: 
  group  months
0     A   11.04
1     A   11.89
2     E    7.51

类似toy['interpolated'] = splines[toy['MMD'](toy['months'] 的东西如下所示:

splines['A'](7)
Out[135]: array(0.90897722)

splines['E'](7)
Out[136]: array(1.74683114)

正在考虑apply\ pipenp.select,但它只是在周五晚些时候逃脱了。

【问题讨论】:

    标签: python pandas scipy


    【解决方案1】:

    我认为您可以将.applylambda row: func(row) 一起使用,其中func(row) 采用splines[row['group']](row['month']) 的形式:

    toy['spline_x'] = toy.apply(lambda row: splines[row['group']](row['month'), axis=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-08
      • 2016-11-03
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2020-03-17
      相关资源
      最近更新 更多