代码之家  ›  专栏  ›  技术社区  ›  Dzmitry Lazerka

按比例插入重复索引

  •  1
  • Dzmitry Lazerka  · 技术社区  · 6 年前

    我有一张像这样的桌子 df = pd.DataFrame([1,np.nan,3,1,np.nan,3,50,np.nan,52], index=[7, 8, 9, 7, 12, 27, 7, 8, 9]) :

    index  values
    7      1
    8      NaN
    9      3
    7      1
    12     NaN
    27     3
    7      50
    8      NaN
    9      52
    

    行已正确排序。但是,这里的索引没有排序,并且设计上有重复的索引。

    如何在此处按索引比例插入值(method=“index”)?

    如果我尝试使用索引进行插值,结果序列会因为索引重复而混乱: df.interpolate(method='index') :

    index  values  desired  actual
    7      1       1        1
    8      NaN     2        2
    9      3       3        3
    7      1       1        1
    12     NaN     1.5      52   <-- wat
    27     3       3        3
    7      50      50       50
    8      NaN     51       1.1  <-- wat
    9      52      52       52
    

    如果不可复制:pandas 0.23.3,numpy:1.14.5,python:3.6.5

    2 回复  |  直到 6 年前
        1
  •  2
  •   BENY    6 年前

    np.where(df['values'].isnull(),df['values'].shift()+(df['values'].shift(-1)-df['values'].shift())*(df['index']-df['index'].shift())/(df['index'].shift(-1)-df['index'].shift()),df['values'])
    Out[219]: array([ 1. ,  2. ,  3. ,  1. ,  1.5,  3. , 50. , 51. , 52. ])
    

        2
  •  3
  •   Scott Boston    6 年前

    df.groupby(df.index.to_series().diff().lt(0).cumsum())\
      .apply(lambda x: x.interpolate(method='index'))
    

           0
    7    1.0
    8    2.0
    9    3.0
    7    1.0
    12   1.5
    27   3.0
    7   50.0
    8   51.0
    9   52.0