与重复索引按比例插值

时间:2018-07-31 01:38:46

标签: pandas numpy

我有一张桌子 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”)?

如果我尝试使用索引进行插值,由于重复的索引,导致Series混乱: 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

如果不可复制:熊猫0.23.3,numpy:1.14.5,Python:3.6.5

2 个答案:

答案 0 :(得分:3)

尝试根据索引添加对数据框的分组:

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

答案 1 :(得分:2)

如果您遇到我在scott的评论中上面提到的情况

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. ])

这是检查每个空值在两个有效值之间的距离,并用索引(不同)的距离填充该值。

公差:两个值之间只有一个缺失值